LNRoomSeatsView.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. //
  2. // LNRoomSeatsView.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/3/9.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNRoomSeatsView: UIView {
  11. private let hostSeat = LNRoomHostSeatView()
  12. private let guestSeat = LNRoomGuestSeatView()
  13. private var playMateSeats: [LNRoomPlaymateSeatView] = []
  14. private weak var roomSession: LNRoomViewModel?
  15. override init(frame: CGRect) {
  16. super.init(frame: frame)
  17. setupViews()
  18. }
  19. func update(_ room: LNRoomViewModel?) {
  20. roomSession = room
  21. hostSeat.update(room)
  22. guestSeat.update(room)
  23. playMateSeats.forEach { $0.update(room) }
  24. }
  25. required init?(coder: NSCoder) {
  26. fatalError("init(coder:) has not been implemented")
  27. }
  28. }
  29. extension LNRoomSeatsView {
  30. private func setupViews() {
  31. let topView = buildTopView()
  32. addSubview(topView)
  33. topView.snp.makeConstraints { make in
  34. make.horizontalEdges.equalToSuperview().inset(20)
  35. make.top.equalToSuperview()
  36. }
  37. let seats = buildSeatsView()
  38. addSubview(seats)
  39. seats.snp.makeConstraints { make in
  40. make.horizontalEdges.equalToSuperview().inset(20)
  41. make.top.equalTo(topView.snp.bottom).offset(20)
  42. make.bottom.equalToSuperview()
  43. }
  44. }
  45. private func buildTopView() -> UIView {
  46. let stackView = UIStackView()
  47. stackView.distribution = .equalSpacing
  48. stackView.axis = .horizontal
  49. // 主持人位置
  50. stackView.addArrangedSubview(hostSeat)
  51. // 中间介绍界面
  52. let orderView = UIView()
  53. stackView.addArrangedSubview(orderView)
  54. let orderTag = UIImageView()
  55. orderTag.image = .icRoomOrderIntroduce.resizableImage(withCapInsets: .init(top: 0, left: 55, bottom: 0, right: 55))
  56. orderView.addSubview(orderTag)
  57. orderTag.snp.makeConstraints { make in
  58. make.horizontalEdges.equalToSuperview()
  59. make.verticalEdges.equalToSuperview()
  60. make.width.greaterThanOrEqualTo(130)
  61. }
  62. let textView = UIView()
  63. textView.alpha = 0.8
  64. orderTag.addSubview(textView)
  65. textView.snp.makeConstraints { make in
  66. make.top.equalToSuperview().offset(4)
  67. make.centerX.equalToSuperview()
  68. make.leading.greaterThanOrEqualToSuperview().offset(25)
  69. }
  70. let textLabel = UILabel()
  71. textLabel.font = .body_xs
  72. textLabel.textColor = .text_2
  73. textLabel.text = .init(key: "A00327")
  74. textView.addSubview(textLabel)
  75. textLabel.snp.makeConstraints { make in
  76. make.verticalEdges.equalToSuperview()
  77. make.leading.equalToSuperview()
  78. }
  79. let arrow = UIImageView.arrowImageView(size: 8)
  80. arrow.tintColor = .text_2
  81. textView.addSubview(arrow)
  82. arrow.snp.makeConstraints { make in
  83. make.centerY.equalToSuperview()
  84. make.leading.equalTo(textLabel.snp.trailing).offset(5)
  85. make.trailing.equalToSuperview()
  86. }
  87. // 土豪金座位
  88. stackView.addArrangedSubview(guestSeat)
  89. return stackView
  90. }
  91. private func buildSeatsView() -> UIView {
  92. let seatsView = LNMultiLineStackView()
  93. seatsView.columns = 4
  94. seatsView.spacing = 20
  95. seatsView.itemDistribution = .equalSpacing
  96. for i in 0..<8 {
  97. let seat = LNRoomPlaymateSeatView(seatNum: i + 2)
  98. seat.update(roomSession)
  99. playMateSeats.append(seat)
  100. }
  101. seatsView.update(playMateSeats)
  102. return seatsView
  103. }
  104. }