LNRoomSettingMenuPanel.swift 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. //
  2. // LNRoomSettingMenuPanel.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/3/16.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNRoomSettingMenuPanel: LNPopupView {
  11. private var editView: UIView?
  12. private var closeView: UIView?
  13. private weak var roomSession: LNRoomViewModel?
  14. override init(frame: CGRect) {
  15. super.init(frame: frame)
  16. setupViews()
  17. LNEventDeliver.addObserver(self)
  18. }
  19. func update(_ room: LNRoomViewModel?) {
  20. roomSession = room
  21. onRoomSeatsChanged()
  22. }
  23. required init?(coder: NSCoder) {
  24. fatalError("init(coder:) has not been implemented")
  25. }
  26. }
  27. extension LNRoomSettingMenuPanel: LNRoomViewModelNotify {
  28. func onRoomSeatsChanged() {
  29. closeView?.isHidden = roomSession?.roomInfo.owner.isMyUid != true
  30. }
  31. }
  32. extension LNRoomSettingMenuPanel {
  33. private func setupViews() {
  34. container.backgroundColor = .fill_7
  35. let header = buildHeader()
  36. container.addSubview(header)
  37. header.snp.makeConstraints { make in
  38. make.horizontalEdges.top.equalToSuperview()
  39. make.height.equalTo(52)
  40. }
  41. let stackView = UIStackView()
  42. stackView.axis = .horizontal
  43. stackView.alignment = .top
  44. stackView.spacing = 2
  45. stackView.distribution = .fillEqually
  46. container.addSubview(stackView)
  47. stackView.snp.makeConstraints { make in
  48. make.top.equalTo(header.snp.bottom)
  49. make.leading.equalToSuperview().offset(10)
  50. make.trailing.lessThanOrEqualToSuperview().offset(-10)
  51. make.bottom.equalToSuperview().offset(commonBottomInset)
  52. make.height.equalTo(85)
  53. }
  54. let editView = buildActionItem(
  55. icon: .icSettingsRoom,
  56. title: .init(key: "B00095")
  57. ) { [weak self] in
  58. guard let self else { return }
  59. guard let roomSession else { return }
  60. dismiss()
  61. let panel = LNRoomInfoEditPanel()
  62. panel.update(roomSession)
  63. panel.popup(self)
  64. }
  65. stackView.addArrangedSubview(editView)
  66. self.editView = editView
  67. let closeView = buildActionItem(
  68. icon: .icShutdown,
  69. title: .init(key: "A00338")
  70. ) { [weak self] in
  71. guard let self else { return }
  72. guard let roomSession else { return }
  73. dismiss()
  74. LNCommonAlertView.showCloseRoomAlert(roomSession)
  75. }
  76. stackView.addArrangedSubview(closeView)
  77. closeView.isHidden = true
  78. self.closeView = closeView
  79. }
  80. private func buildHeader() -> UIView {
  81. let view = UIView()
  82. let titleLabel = UILabel()
  83. titleLabel.text = .init(key: "A00337")
  84. titleLabel.font = .heading_h3
  85. titleLabel.textColor = .text_1
  86. view.addSubview(titleLabel)
  87. titleLabel.snp.makeConstraints { make in
  88. make.leading.equalToSuperview().offset(16)
  89. make.centerY.equalToSuperview()
  90. }
  91. return view
  92. }
  93. private func buildActionItem(icon: UIImage, title: String, handler: @escaping () -> Void) -> UIView {
  94. let view = UIView()
  95. view.snp.makeConstraints { make in
  96. make.width.equalTo(70)
  97. make.height.equalTo(85)
  98. }
  99. view.onTap(handler)
  100. let buttonHolder = UIView()
  101. buttonHolder.backgroundColor = UIColor.primary_1.withAlphaComponent(0.24)
  102. buttonHolder.layer.cornerRadius = 24
  103. buttonHolder.isUserInteractionEnabled = false
  104. view.addSubview(buttonHolder)
  105. buttonHolder.snp.makeConstraints { make in
  106. make.top.equalToSuperview().offset(1)
  107. make.centerX.equalToSuperview()
  108. make.width.height.equalTo(48)
  109. }
  110. let iconView = UIImageView()
  111. iconView.image = icon
  112. iconView.tintColor = .primary_1
  113. buttonHolder.addSubview(iconView)
  114. iconView.snp.makeConstraints { make in
  115. make.center.equalToSuperview()
  116. make.width.height.equalTo(28)
  117. }
  118. let titleLabel = UILabel()
  119. titleLabel.text = title
  120. titleLabel.font = .body_s
  121. titleLabel.textColor = .text_2
  122. titleLabel.textAlignment = .center
  123. titleLabel.numberOfLines = 2
  124. view.addSubview(titleLabel)
  125. titleLabel.snp.makeConstraints { make in
  126. make.top.equalTo(buttonHolder.snp.bottom).offset(6)
  127. make.horizontalEdges.equalToSuperview()
  128. }
  129. return view
  130. }
  131. }