LNOrderQRTabView.swift 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //
  2. // LNOrderQRTabView.swift
  3. // Lanu
  4. //
  5. // Created by OneeChan on 2025/11/26.
  6. //
  7. import Foundation
  8. import UIKit
  9. import SnapKit
  10. protocol LNOrderQRTabViewDelegate: AnyObject {
  11. func onOrderQRTabView(view: LNOrderQRTabView, didChangedType newType: LNOrderSource)
  12. }
  13. class LNOrderQRTabView: UIView {
  14. private let indicator = UIView()
  15. private let normal = UIButton()
  16. private let edit = UIButton()
  17. weak var delegate: LNOrderQRTabViewDelegate?
  18. var curType: LNOrderSource = .normal {
  19. didSet {
  20. normal.isSelected = curType == .normal
  21. edit.isSelected = curType == .custom
  22. indicator.snp.remakeConstraints { make in
  23. make.edges.equalTo(curType == .normal ? normal : edit)
  24. }
  25. UIView.animate(withDuration: 0.25) { [weak self] in
  26. guard let self else { return }
  27. layoutIfNeeded()
  28. }
  29. delegate?.onOrderQRTabView(view: self, didChangedType: curType)
  30. }
  31. }
  32. override init(frame: CGRect) {
  33. super.init(frame: frame)
  34. setupViews()
  35. }
  36. required init?(coder: NSCoder) {
  37. fatalError("init(coder:) has not been implemented")
  38. }
  39. }
  40. extension LNOrderQRTabView {
  41. private func setupViews() {
  42. backgroundColor = .fill_3
  43. layer.cornerRadius = 20
  44. snp.makeConstraints { make in
  45. make.height.equalTo(40)
  46. }
  47. indicator.backgroundColor = .fill
  48. indicator.layer.cornerRadius = 16
  49. addSubview(indicator)
  50. normal.setTitle(.init(key: "A00160"), for: .normal)
  51. normal.setTitleColor(.text_5, for: .selected)
  52. normal.setTitleColor(.text_4, for: .normal)
  53. normal.titleLabel?.font = .heading_h4
  54. addSubview(normal)
  55. normal.snp.makeConstraints { make in
  56. make.centerY.equalToSuperview()
  57. make.leading.equalToSuperview().offset(4)
  58. make.height.equalTo(32)
  59. }
  60. edit.setTitle(.init(key: "A00161"), for: .normal)
  61. edit.setTitleColor(.text_5, for: .selected)
  62. edit.setTitleColor(.text_4, for: .normal)
  63. edit.titleLabel?.font = .heading_h4
  64. addSubview(edit)
  65. edit.snp.makeConstraints { make in
  66. make.centerY.equalToSuperview()
  67. make.trailing.equalToSuperview().offset(-4)
  68. make.height.equalTo(32)
  69. make.leading.equalTo(normal.snp.trailing).offset(3)
  70. make.width.equalTo(normal)
  71. }
  72. normal.addAction(UIAction(handler: { [weak self] _ in
  73. guard let self else { return }
  74. curType = .normal
  75. }), for: .touchUpInside)
  76. edit.addAction(UIAction(handler: { [weak self] _ in
  77. guard let self else { return }
  78. curType = .custom
  79. }), for: .touchUpInside)
  80. }
  81. }