LNOrderRoomSeatsView.swift 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. //
  2. // LNOrderRoomSeatsView.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/3/9.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNOrderRoomSeatsView: UIView {
  11. private let hostSeat = LNOrderRoomUserSeatView(seatNum: .host)
  12. private let guestSeat = LNOrderRoomUserSeatView(seatNum: .guest)
  13. private var playMateSeats: [LNOrderRoomUserSeatView] = []
  14. private weak var roomSession: LNOrderRoomViewModel?
  15. override init(frame: CGRect) {
  16. super.init(frame: frame)
  17. setupViews()
  18. }
  19. func update(_ room: LNOrderRoomViewModel?) {
  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 LNOrderRoomSeatsView {
  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. LNOrderRoomGuideView.mainSeatView = stackView
  50. // 主持人位置
  51. stackView.addArrangedSubview(hostSeat)
  52. // 中间介绍界面
  53. let orderView = UIView()
  54. orderView.onTap { [weak self] in
  55. guard let self else { return }
  56. guard let view = viewController?.view else { return }
  57. LNOrderRoomGuideView.show(view)
  58. }
  59. stackView.addArrangedSubview(orderView)
  60. let orderTag = UIImageView()
  61. orderTag.image = .icRoomOrderIntroduce.resizableImage(withCapInsets: .init(top: 0, left: 55, bottom: 0, right: 55))
  62. orderView.addSubview(orderTag)
  63. orderTag.snp.makeConstraints { make in
  64. make.horizontalEdges.equalToSuperview()
  65. make.verticalEdges.equalToSuperview()
  66. make.width.greaterThanOrEqualTo(130)
  67. }
  68. let textView = UIView()
  69. textView.isUserInteractionEnabled = false
  70. textView.alpha = 0.8
  71. orderTag.addSubview(textView)
  72. textView.snp.makeConstraints { make in
  73. make.top.equalToSuperview().offset(4)
  74. make.centerX.equalToSuperview()
  75. make.leading.greaterThanOrEqualToSuperview().offset(25)
  76. }
  77. let textLabel = UILabel()
  78. textLabel.font = .body_xs
  79. textLabel.textColor = .text_2
  80. textLabel.text = .init(key: "A00327")
  81. textView.addSubview(textLabel)
  82. textLabel.snp.makeConstraints { make in
  83. make.verticalEdges.equalToSuperview()
  84. make.leading.equalToSuperview()
  85. }
  86. let arrow = UIImageView.arrowImageView(size: 8)
  87. arrow.tintColor = .text_2
  88. textView.addSubview(arrow)
  89. arrow.snp.makeConstraints { make in
  90. make.centerY.equalToSuperview()
  91. make.leading.equalTo(textLabel.snp.trailing).offset(5)
  92. make.trailing.equalToSuperview()
  93. }
  94. // 土豪金座位
  95. stackView.addArrangedSubview(guestSeat)
  96. return stackView
  97. }
  98. private func buildSeatsView() -> UIView {
  99. let seatsView = LNMultiLineStackView()
  100. seatsView.columns = 4
  101. seatsView.spacing = 20
  102. seatsView.itemDistribution = .equalSpacing
  103. LNOrderRoomGuideView.playmateView = seatsView
  104. for seat in LNOrderRoomSeatNum.allCases {
  105. if case .mic1 ... .mic8 = seat {
  106. let seat = LNOrderRoomUserSeatView(seatNum: seat)
  107. seat.update(roomSession)
  108. playMateSeats.append(seat)
  109. }
  110. }
  111. seatsView.update(playMateSeats)
  112. return seatsView
  113. }
  114. }