LNRoomSettingMenuPanel.swift 4.1 KB

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