| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- //
- // LNRoomHostSeatView.swift
- // Gami
- //
- // Created by OneeChan on 2026/3/9.
- //
- import Foundation
- import UIKit
- import SnapKit
- class LNRoomHostSeatView: UIView, LNRoomSeatViewProtocol {
- private let seatNum: Int = 0
- private let nameLabel = UILabel()
- private let emptyIc = UIImageView()
-
- private let userView = UIView()
- private let userAvatar = UIImageView()
- private let muteIc = UIImageView()
- private let speakingView = LNRoomSeatSpeakingView()
-
- private weak var roomSession: LNRoomViewModel?
- private var curSeat: LNRoomSeatItem? {
- roomSession?.seatsInfo.first { $0.index == seatNum }
- }
- private var isSpeaking: Bool {
- roomSession?.speakingUser.contains(curSeat?.uid ?? "") == true
- }
-
- override init(frame: CGRect) {
- super.init(frame: frame)
-
- setupViews()
-
- LNEventDeliver.addObserver(self)
- }
-
- func update(_ room: LNRoomViewModel?) {
- roomSession = room
- onRoomSeatsChanged()
- speakingView.update(seatNum, room: room)
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- }
- extension LNRoomHostSeatView: LNRoomViewModelNotify {
- func onRoomSeatsChanged() {
- if let curSeat {
- muteIc.isHidden = !curSeat.isMute
- userView.isHidden = false
- userAvatar.sd_setImage(with: URL(string: curSeat.avatar))
- nameLabel.text = curSeat.nickname.isEmpty ? " " : curSeat.nickname
- } else {
- muteIc.isHidden = true
- userView.isHidden = true
- nameLabel.text = .init(key: "A00328")
- }
- }
- }
- extension LNRoomHostSeatView {
- private func setupViews() {
- onTap { [weak self] in
- guard let self else { return }
- guard let roomSession,
- let curSeat else { return }
- handlerClick(roomSession, curSeat)
- }
- snp.makeConstraints { make in
- make.width.equalTo(76)
- make.height.equalTo(68)
- }
-
- let empty = buildEmpty()
- addSubview(empty)
- empty.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalToSuperview()
- }
-
- let userView = buildUserView()
- addSubview(userView)
- userView.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalToSuperview()
- }
-
- let bottom = buildBottom()
- addSubview(bottom)
- bottom.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.bottom.equalToSuperview()
- make.leading.greaterThanOrEqualToSuperview()
- }
- }
-
- private func buildEmpty() -> UIView {
- emptyIc.image = .icSeatNormal
-
- return emptyIc
- }
-
- private func buildUserView() -> UIView {
- userView.isHidden = true
- userView.snp.makeConstraints { make in
- make.width.height.equalTo(46)
- }
-
- userView.addSubview(speakingView)
- speakingView.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- let gradientBg = UIImageView()
- gradientBg.layer.cornerRadius = 23
- gradientBg.image = .primary_7
- gradientBg.clipsToBounds = true
- userView.addSubview(gradientBg)
- gradientBg.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- userAvatar.layer.cornerRadius = 22
- userAvatar.clipsToBounds = true
- userView.addSubview(userAvatar)
- userAvatar.snp.makeConstraints { make in
- make.center.equalToSuperview()
- make.width.height.equalTo(44)
- }
-
- muteIc.layer.cornerRadius = 6.3
- muteIc.backgroundColor = .black.withAlphaComponent(0.7)
- muteIc.image = .icMicOn
- userView.addSubview(muteIc)
- muteIc.snp.makeConstraints { make in
- make.trailing.equalToSuperview()
- make.bottom.equalToSuperview()
- make.width.height.equalTo(12.6)
- }
-
- return userView
- }
-
- private func buildBottom() -> UIView {
- let container = UIView()
-
- let hostIc = UIImageView(image: .icMicRoomHost)
- container.addSubview(hostIc)
- hostIc.snp.makeConstraints { make in
- make.leading.equalToSuperview()
- make.centerY.equalToSuperview()
- }
-
- nameLabel.text = .init(key: "A00328")
- nameLabel.font = .body_xs
- nameLabel.textColor = .text_1
- nameLabel.textAlignment = .center
- container.addSubview(nameLabel)
- nameLabel.snp.makeConstraints { make in
- make.leading.equalTo(hostIc.snp.trailing).offset(2)
- make.trailing.equalToSuperview()
- make.verticalEdges.equalToSuperview()
- }
- return container
- }
- }
|