LNEditGenderPanel.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. //
  2. // LNEditGenderPanel.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/12/19.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNEditGenderPanel: LNPopupView {
  11. private let maleButton = UIButton()
  12. private let femaleButton = UIButton()
  13. private let confirmButton = UIButton()
  14. var curGender: LNUserGender = .unknow {
  15. didSet {
  16. maleButton.backgroundColor = curGender == .male ? .fill_5 : .primary_1
  17. femaleButton.backgroundColor = curGender == .female ? .fill_5 : .primary_1
  18. if curGender == .unknow {
  19. confirmButton.isEnabled = false
  20. confirmButton.setBackgroundImage(nil, for: .normal)
  21. } else if confirmButton.backgroundImage(for: .normal) == nil {
  22. confirmButton.isEnabled = true
  23. confirmButton.setBackgroundImage(.primary_8, for: .normal)
  24. }
  25. }
  26. }
  27. var handler: ((LNUserGender) -> Void)?
  28. override init(frame: CGRect) {
  29. super.init(frame: frame)
  30. setupViews()
  31. }
  32. required init?(coder: NSCoder) {
  33. fatalError("init(coder:) has not been implemented")
  34. }
  35. }
  36. extension LNEditGenderPanel {
  37. private func setupViews() {
  38. let titleLabel = UILabel()
  39. titleLabel.font = .heading_h3
  40. titleLabel.textColor = .text_5
  41. titleLabel.text = .init(key: "A00032")
  42. container.addSubview(titleLabel)
  43. titleLabel.snp.makeConstraints { make in
  44. make.centerX.equalToSuperview()
  45. make.top.equalToSuperview().offset(16)
  46. }
  47. maleButton.layer.cornerRadius = 23
  48. maleButton.addAction(UIAction(handler: { [weak self] _ in
  49. guard let self else { return }
  50. curGender = .male
  51. }), for: .touchUpInside)
  52. container.addSubview(maleButton)
  53. maleButton.snp.makeConstraints { make in
  54. make.directionalHorizontalEdges.equalToSuperview().inset(16)
  55. make.top.equalTo(titleLabel.snp.bottom).offset(36)
  56. make.height.equalTo(46)
  57. }
  58. let maleView = UIView()
  59. maleView.isUserInteractionEnabled = false
  60. maleButton.addSubview(maleView)
  61. maleView.snp.makeConstraints { make in
  62. make.center.equalToSuperview()
  63. }
  64. let maleIc = UIImageView()
  65. maleIc.image = .init(named: "ic_gender_male")
  66. maleView.addSubview(maleIc)
  67. maleIc.snp.makeConstraints { make in
  68. make.centerY.equalToSuperview()
  69. make.leading.equalToSuperview()
  70. }
  71. let maleTitleLabel = UILabel()
  72. maleTitleLabel.text = LNUserGender.male.desc
  73. maleTitleLabel.font = .heading_h4
  74. maleTitleLabel.textColor = .text_5
  75. maleView.addSubview(maleTitleLabel)
  76. maleTitleLabel.snp.makeConstraints { make in
  77. make.verticalEdges.equalToSuperview()
  78. make.trailing.equalToSuperview()
  79. make.leading.equalTo(maleIc.snp.trailing).offset(6)
  80. }
  81. femaleButton.layer.cornerRadius = 23
  82. femaleButton.addAction(UIAction(handler: { [weak self] _ in
  83. guard let self else { return }
  84. curGender = .female
  85. }), for: .touchUpInside)
  86. container.addSubview(femaleButton)
  87. femaleButton.snp.makeConstraints { make in
  88. make.directionalHorizontalEdges.equalToSuperview().inset(16)
  89. make.top.equalTo(maleButton.snp.bottom).offset(12)
  90. make.height.equalTo(46)
  91. }
  92. let femaleView = UIView()
  93. femaleView.isUserInteractionEnabled = false
  94. femaleButton.addSubview(femaleView)
  95. femaleView.snp.makeConstraints { make in
  96. make.center.equalToSuperview()
  97. }
  98. let femaleIc = UIImageView()
  99. femaleIc.image = .init(named: "ic_gender_female")
  100. femaleView.addSubview(femaleIc)
  101. femaleIc.snp.makeConstraints { make in
  102. make.centerY.equalToSuperview()
  103. make.leading.equalToSuperview()
  104. }
  105. let femaleTitleLabel = UILabel()
  106. femaleTitleLabel.text = LNUserGender.female.desc
  107. femaleTitleLabel.font = .heading_h4
  108. femaleTitleLabel.textColor = .text_5
  109. femaleView.addSubview(femaleTitleLabel)
  110. femaleTitleLabel.snp.makeConstraints { make in
  111. make.verticalEdges.equalToSuperview()
  112. make.trailing.equalToSuperview()
  113. make.leading.equalTo(femaleIc.snp.trailing).offset(6)
  114. }
  115. confirmButton.setTitle(.init(key: "A00185"), for: .normal)
  116. confirmButton.setTitleColor(.text_1, for: .normal)
  117. confirmButton.titleLabel?.font = .heading_h3
  118. confirmButton.setBackgroundImage(.primary_8, for: .normal)
  119. confirmButton.layer.cornerRadius = 23.5
  120. confirmButton.clipsToBounds = true
  121. confirmButton.backgroundColor = .fill_4
  122. confirmButton.addAction(UIAction(handler: { [weak self] _ in
  123. guard let self else { return }
  124. dismiss()
  125. handler?(curGender)
  126. }), for: .touchUpInside)
  127. container.addSubview(confirmButton)
  128. confirmButton.snp.makeConstraints { make in
  129. make.directionalHorizontalEdges.equalToSuperview().inset(12)
  130. make.top.equalTo(femaleButton.snp.bottom).offset(16)
  131. make.bottom.equalToSuperview().offset(-safeBottomInset - 5)
  132. make.height.equalTo(47)
  133. }
  134. }
  135. }