| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- //
- // LNGenderSetupViewController.swift
- // Lanu
- //
- // Created by OneeChan on 2025/12/2.
- //
- import Foundation
- import UIKit
- import SnapKit
- extension UIView {
- func pushToGenderSetup() {
- let vc = LNGenderSetupViewController()
- navigationController?.pushViewController(vc, animated: true)
- }
- }
- class LNGenderSetupViewController: LNViewController {
- private let maleIc = UIImageView()
- private let maleBg = UIImageView()
- private let maleLabel = UILabel()
-
- private let femaleIc = UIImageView()
- private let femaleBg = UIImageView()
- private let femaleLabel = UILabel()
-
- private let nextButton = UIButton()
-
- private var curGender: LNUserGender = .unknow {
- didSet {
- switch curGender {
- case .male:
- maleIc.image = .icLoginGenderMaleSelected
- maleBg.image = .icLoginGenderSelected
- maleLabel.textColor = .text_1
-
- femaleIc.image = .icLoginGenderFemale
- femaleBg.image = nil
- femaleLabel.textColor = .text_5
- case .female:
- maleIc.image = .icLoginGenderMale
- maleBg.image = nil
- maleLabel.textColor = .text_5
-
- femaleIc.image = .icLoginGenderFemaleSelected
- femaleBg.image = .icLoginGenderSelected
- femaleLabel.textColor = .text_1
- case .unknow:
- break
- }
- nextButton.isEnabled = curGender != .unknow
- }
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- enableDragBack = false
-
- setupViews()
- }
- }
- extension LNGenderSetupViewController {
- private func setupViews() {
- navigationBarColor = .clear
-
- let bg = UIImageView()
- bg.image = .icLoginProfileBg
- view.addSubview(bg)
- bg.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview()
- make.top.equalTo(fakeNaviBgView)
- }
-
- setupNavigationBar()
-
- let titles = buildTitles()
- view.addSubview(titles)
- titles.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(22)
- make.top.equalToSuperview().offset(22)
- }
-
- let gender = buildGenderView()
- view.addSubview(gender)
- gender.snp.makeConstraints { make in
- make.centerY.equalToSuperview().multipliedBy(0.8)
- make.horizontalEdges.equalToSuperview().inset(16)
- }
-
- nextButton.setBackgroundImage(.primary_8, for: .normal)
- nextButton.setTitle(.init(key: "A00101"), for: .normal)
- nextButton.setTitleColor(.text_1, for: .normal)
- nextButton.titleLabel?.font = .heading_h3
- nextButton.layer.cornerRadius = 23.5
- nextButton.clipsToBounds = true
- nextButton.isEnabled = false
- nextButton.addAction(UIAction(handler: { [weak self] _ in
- guard let self else { return }
- let config = LNProfileUpdateConfig()
- config.gender = self.curGender
- self.view.pushToBaseInfoSetup(config)
- }), for: .touchUpInside)
- view.addSubview(nextButton)
- nextButton.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom).offset(-4)
- make.height.equalTo(47)
- }
- }
-
- private func buildTitles() -> UIView {
- let stackView = UIStackView()
- stackView.axis = .vertical
- stackView.spacing = 6
-
- let mainLabel = UILabel()
- mainLabel.text = .init(key: "A00106")
- mainLabel.font = .init(name: UIFont.boldFontName, size: 40)
- mainLabel.textColor = .text_5
- mainLabel.numberOfLines = 0
- stackView.addArrangedSubview(mainLabel)
-
- let subTitleLabel = UILabel()
- subTitleLabel.text = .init(key: "A00107")
- subTitleLabel.font = .heading_h1
- subTitleLabel.textColor = .text_5
- subTitleLabel.numberOfLines = 0
- stackView.addArrangedSubview(subTitleLabel)
-
- let descLabel = UILabel()
- descLabel.font = .body_m
- descLabel.textColor = .text_4
- descLabel.text = .init(key: "A00108")
- descLabel.numberOfLines = 0
- stackView.addArrangedSubview(descLabel)
-
- return stackView
- }
-
- private func buildGenderView() -> UIView {
- let container = UIView()
-
- let maleView = UIView()
- maleView.onTap { [weak self] in
- guard let self else { return }
- self.curGender = .male
- }
- container.addSubview(maleView)
- maleView.snp.makeConstraints { make in
- make.verticalEdges.equalToSuperview()
- make.centerX.equalToSuperview().multipliedBy(0.5)
- }
-
- let maleImage: UIImage = .icLoginGenderSelected
- maleBg.backgroundColor = .fill_2
- maleBg.layer.cornerRadius = 30
- maleBg.isUserInteractionEnabled = false
- maleView.addSubview(maleBg)
- maleBg.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview()
- make.bottom.equalToSuperview()
- make.size.equalTo(maleImage.size)
- }
-
- maleIc.image = .icLoginGenderMale
- maleIc.isUserInteractionEnabled = false
- maleView.addSubview(maleIc)
- maleIc.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalToSuperview()
- make.bottom.equalTo(maleBg.snp.bottom).offset(-68)
- }
-
- maleLabel.text = .init(key: "A00109")
- maleLabel.font = .heading_h1_5
- maleLabel.textColor = .text_5
- maleView.addSubview(maleLabel)
- maleLabel.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.bottom.equalToSuperview().offset(-16)
- }
-
- let femaleView = UIView()
- femaleView.onTap { [weak self] in
- guard let self else { return }
- self.curGender = .female
- }
- container.addSubview(femaleView)
- femaleView.snp.makeConstraints { make in
- make.verticalEdges.equalToSuperview()
- make.centerX.equalToSuperview().multipliedBy(1.5)
- }
-
- let femaleImage: UIImage = .icLoginGenderSelected
- femaleBg.backgroundColor = .fill_2
- femaleBg.layer.cornerRadius = 30
- femaleBg.isUserInteractionEnabled = false
- femaleView.addSubview(femaleBg)
- femaleBg.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview()
- make.bottom.equalToSuperview()
- make.size.equalTo(femaleImage.size)
- }
-
- femaleIc.image = .icLoginGenderFemale
- femaleIc.isUserInteractionEnabled = false
- femaleView.addSubview(femaleIc)
- femaleIc.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalToSuperview()
- make.bottom.equalTo(femaleBg.snp.bottom).offset(-68)
- }
-
- femaleLabel.text = .init(key: "A00110")
- femaleLabel.font = .heading_h1_5
- femaleLabel.textColor = .text_5
- femaleView.addSubview(femaleLabel)
- femaleLabel.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.bottom.equalToSuperview().offset(-16)
- }
-
- return container
- }
-
- private func setupNavigationBar() {
- customBack = { [weak self] in
- guard let self else { return }
- navigationController?.popViewController(animated: true)
- LNAccountManager.shared.logout()
- }
-
- let skipButton = UIButton()
- skipButton.setTitle(.init(key: "A00286"), for: .normal)
- skipButton.titleLabel?.font = .heading_h2
- skipButton.setTitleColor(.text_5, for: .normal)
- skipButton.addAction(UIAction(handler: { [weak self] _ in
- guard let self else { return }
-
- let config = LNProfileUpdateConfig()
- view.pushToBaseInfoSetup(config)
- }), for: .touchUpInside)
- setRightButton(skipButton)
- }
- }
- #if DEBUG
- import SwiftUI
- struct LNGenderSetupViewControllerPreview: UIViewControllerRepresentable {
- func makeUIViewController(context: Context) -> some UIViewController {
- LNGenderSetupViewController()
- }
-
- func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
-
- }
- }
- #Preview(body: {
- LNGenderSetupViewControllerPreview()
- })
- #endif
|