| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- //
- // LNUserSearchRoomCardView.swift
- // Gami
- //
- // Created by OneeChan on 2026/3/19.
- //
- import Foundation
- import UIKit
- import SnapKit
- class LNUserSearchRoomCardView: UIView {
- private let cover = UIImageView()
- private let bottomCover = UIImageView()
- private let idLabel = UILabel()
- private let hotIconView = UIImageView()
- private let hotCountLabel = UILabel()
- private let titleLabel = UILabel()
- private let subtitleLabel = UILabel()
-
- private var curItem: LNRoomItemVO?
-
- override init(frame: CGRect) {
- super.init(frame: frame)
-
- setupViews()
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- func update(_ item: LNRoomItemVO) {
- idLabel.text = "ID \(item.roomId)"
- // hotCountLabel.text = "\(item.viewers)"
- cover.sd_setImage(with: URL(string: item.roomCover))
- titleLabel.text = item.roomTitle
- subtitleLabel.text = item.user.nickname
-
- curItem = item
- }
- }
- extension LNUserSearchRoomCardView {
- private func setupViews() {
- backgroundColor = .clear
-
- onTap { [weak self] in
- guard let self, let curItem else { return }
- pushToRoom(curItem.roomId)
- }
-
- cover.layer.cornerRadius = 12
- cover.clipsToBounds = true
- cover.contentMode = .scaleAspectFill
- addSubview(cover)
- cover.snp.makeConstraints { make in
- make.top.equalToSuperview()
- make.horizontalEdges.equalToSuperview()
- make.height.equalTo(cover.snp.width)
- }
-
- bottomCover.image = UIImage.generateLinearGradientImage(
- colors: [.clear, .black.withAlphaComponent(0.65)],
- size: .init(width: 10, height: 10),
- endPoint: .init(x: 0, y: 1)
- )
- cover.addSubview(bottomCover)
- bottomCover.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview()
- make.bottom.equalToSuperview()
- make.height.equalTo(30)
- }
-
- idLabel.font = .body_xs
- idLabel.textColor = .text_1
- cover.addSubview(idLabel)
- idLabel.snp.makeConstraints { make in
- make.leading.equalToSuperview().offset(8)
- make.bottom.equalToSuperview().offset(-6)
- }
-
- hotIconView.isHidden = true
- hotIconView.image = UIImage(systemName: "flame.fill")?.withRenderingMode(.alwaysTemplate)
- hotIconView.tintColor = .white
- cover.addSubview(hotIconView)
- hotIconView.snp.makeConstraints { make in
- make.trailing.equalToSuperview().offset(-20)
- make.bottom.equalToSuperview().offset(-8)
- make.width.height.equalTo(10)
- }
-
- hotCountLabel.isHidden = true
- hotCountLabel.font = .body_xs
- hotCountLabel.textColor = .text_1
- cover.addSubview(hotCountLabel)
- hotCountLabel.snp.makeConstraints { make in
- make.leading.equalTo(hotIconView.snp.trailing).offset(2)
- make.centerY.equalTo(hotIconView)
- make.trailing.equalToSuperview().offset(-8)
- }
-
- titleLabel.font = .heading_h4
- titleLabel.textColor = .text_5
- titleLabel.numberOfLines = 1
- addSubview(titleLabel)
- titleLabel.snp.makeConstraints { make in
- make.leading.trailing.equalToSuperview()
- make.top.equalTo(cover.snp.bottom).offset(6)
- }
-
- subtitleLabel.font = .body_xs
- subtitleLabel.textColor = .text_4
- subtitleLabel.numberOfLines = 1
- addSubview(subtitleLabel)
- subtitleLabel.snp.makeConstraints { make in
- make.leading.trailing.equalToSuperview()
- make.top.equalTo(titleLabel.snp.bottom).offset(2)
- make.bottom.equalToSuperview()
- }
- }
- }
|