LNRoomSheetMenu.swift 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. //
  2. // LNRoomSheetMenu.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/3/16.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNRoomSheetMenu: LNBottomSheetMenu {
  11. override init(frame: CGRect) {
  12. super.init(frame: frame)
  13. container.backgroundColor = .fill_7
  14. }
  15. required init?(coder: NSCoder) {
  16. fatalError("init(coder:) has not been implemented")
  17. }
  18. static func buildMenuItem(title: String, handler: @escaping () -> Void) -> UIView {
  19. let container = UIView()
  20. container.onTap(handler)
  21. let titleLabel = UILabel()
  22. titleLabel.font = .heading_h4
  23. titleLabel.textColor = .text_1
  24. titleLabel.text = title
  25. container.addSubview(titleLabel)
  26. titleLabel.snp.makeConstraints { make in
  27. make.centerX.equalToSuperview()
  28. make.verticalEdges.equalToSuperview().inset(15)
  29. }
  30. return container
  31. }
  32. func update(title: String?, views: [UIView]) {
  33. let header = UIView()
  34. if let title {
  35. let titleLabel = UILabel()
  36. titleLabel.font = .heading_h5
  37. titleLabel.textColor = .text_2
  38. titleLabel.text = title
  39. header.addSubview(titleLabel)
  40. titleLabel.snp.makeConstraints { make in
  41. make.centerX.equalToSuperview()
  42. make.top.equalToSuperview().offset(17)
  43. make.bottom.equalToSuperview().offset(-5)
  44. }
  45. } else {
  46. header.snp.makeConstraints { make in
  47. make.height.equalTo(15)
  48. }
  49. }
  50. stackView.addArrangedSubview(header)
  51. stackView.addArrangedSubview(buildMenus(views: views))
  52. stackView.addArrangedSubview(buildSeperator())
  53. stackView.addArrangedSubview(buildCancel())
  54. }
  55. private func buildMenus(views: [UIView]) -> UIView {
  56. let container = UIView()
  57. let stackView = UIStackView()
  58. stackView.axis = .vertical
  59. container.addSubview(stackView)
  60. stackView.snp.makeConstraints { make in
  61. make.horizontalEdges.equalToSuperview()
  62. make.top.equalToSuperview()
  63. make.bottom.equalToSuperview().offset(-15)
  64. }
  65. for view in views {
  66. stackView.addArrangedSubview(view)
  67. }
  68. return container
  69. }
  70. private func buildSeperator() -> UIView {
  71. let view = UIView()
  72. view.backgroundColor = .black.withAlphaComponent(0.8)
  73. view.snp.makeConstraints { make in
  74. make.height.equalTo(3)
  75. }
  76. return view
  77. }
  78. private func buildCancel() -> UIView {
  79. let container = UIView()
  80. container.onTap { [weak self] in
  81. guard let self else { return }
  82. dismiss()
  83. }
  84. let cancel = UILabel()
  85. cancel.text = .init(key: "A00003")
  86. cancel.textColor = .text_2
  87. cancel.font = .heading_h4
  88. container.addSubview(cancel)
  89. cancel.snp.makeConstraints { make in
  90. make.centerX.equalToSuperview()
  91. make.verticalEdges.equalToSuperview().inset(20)
  92. }
  93. return container
  94. }
  95. }