LNLanguageSettingPanel.swift 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. //
  2. // LNLanguageSettingPanel.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/17.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. class LNLanguageSettingPanel: LNPopupView {
  11. override init(frame: CGRect) {
  12. super.init(frame: frame)
  13. setupViews()
  14. }
  15. required init?(coder: NSCoder) {
  16. fatalError("init(coder:) has not been implemented")
  17. }
  18. }
  19. extension LNLanguageSettingPanel {
  20. private func setupViews() {
  21. let stackView = UIStackView()
  22. stackView.axis = .vertical
  23. stackView.spacing = 0
  24. container.addSubview(stackView)
  25. stackView.snp.makeConstraints { make in
  26. make.horizontalEdges.equalToSuperview()
  27. make.top.equalToSuperview()
  28. make.bottom.equalToSuperview().offset(commonBottomInset)
  29. }
  30. var itemViews: [UIView] = []
  31. LNAppLanguage.available.forEach {
  32. itemViews.append(buildLanguageItem($0))
  33. }
  34. for index in (1..<itemViews.count).reversed() {
  35. itemViews.insert(buildLine(), at: index)
  36. }
  37. itemViews.forEach {
  38. stackView.addArrangedSubview($0)
  39. }
  40. }
  41. private func buildLanguageItem(_ language: LNAppLanguage) -> UIView {
  42. let container = UIView()
  43. let checkIc = UIImageView()
  44. checkIc.image = language.isSelected ? .icCheck : .icUncheck
  45. container.addSubview(checkIc)
  46. checkIc.snp.makeConstraints { make in
  47. make.centerY.equalToSuperview()
  48. make.trailing.equalToSuperview().offset(-16)
  49. }
  50. let titleLabel = UILabel()
  51. titleLabel.text = language.text
  52. titleLabel.font = .heading_h4
  53. titleLabel.textColor = .text_5
  54. container.addSubview(titleLabel)
  55. titleLabel.snp.makeConstraints { make in
  56. make.leading.equalToSuperview().offset(16)
  57. make.top.equalToSuperview().offset(12)
  58. make.bottom.equalToSuperview().offset(-12)
  59. make.trailing.lessThanOrEqualTo(checkIc.snp.leading).offset(-5)
  60. }
  61. container.onTap { [weak self] in
  62. guard let self else { return }
  63. LNAppConfig.shared.curLang = language
  64. self.dismiss()
  65. }
  66. return container
  67. }
  68. private func buildLine() -> UIView {
  69. let container = UIView()
  70. let line = UIView()
  71. line.backgroundColor = .fill_2
  72. container.addSubview(line)
  73. line.snp.makeConstraints { make in
  74. make.verticalEdges.equalToSuperview()
  75. make.height.equalTo(1)
  76. make.horizontalEdges.equalToSuperview().inset(16)
  77. }
  78. return container
  79. }
  80. }
  81. #if DEBUG
  82. import SwiftUI
  83. struct LNLanguageSettingPanelPreview: UIViewRepresentable {
  84. func makeUIView(context: Context) -> some UIView {
  85. let container = UIView()
  86. container.backgroundColor = .lightGray
  87. let view = LNLanguageSettingPanel()
  88. view.popup(container)
  89. return container
  90. }
  91. func updateUIView(_ uiView: UIViewType, context: Context) { }
  92. }
  93. #Preview(body: {
  94. LNLanguageSettingPanelPreview()
  95. })
  96. #endif