| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- //
- // LNOrderQRTabView.swift
- // Lanu
- //
- // Created by OneeChan on 2025/11/26.
- //
- import Foundation
- import UIKit
- import SnapKit
- protocol LNOrderQRTabViewDelegate: AnyObject {
- func onOrderQRTabView(view: LNOrderQRTabView, didChangedType newType: LNOrderSource)
- }
- class LNOrderQRTabView: UIView {
- private let indicator = UIView()
- private let normal = UIButton()
- private let edit = UIButton()
-
- weak var delegate: LNOrderQRTabViewDelegate?
-
- var curType: LNOrderSource = .normal {
- didSet {
- normal.isSelected = curType == .normal
- edit.isSelected = curType == .custom
-
- indicator.snp.remakeConstraints { make in
- make.edges.equalTo(curType == .normal ? normal : edit)
- }
- UIView.animate(withDuration: 0.25) { [weak self] in
- guard let self else { return }
- layoutIfNeeded()
- }
- delegate?.onOrderQRTabView(view: self, didChangedType: curType)
- }
- }
-
- override init(frame: CGRect) {
- super.init(frame: frame)
-
- setupViews()
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- }
- extension LNOrderQRTabView {
- private func setupViews() {
- backgroundColor = .fill_3
- layer.cornerRadius = 20
- snp.makeConstraints { make in
- make.height.equalTo(40)
- }
-
- indicator.backgroundColor = .fill
- indicator.layer.cornerRadius = 16
- addSubview(indicator)
-
- normal.setTitle(.init(key: "A00160"), for: .normal)
- normal.setTitleColor(.text_5, for: .selected)
- normal.setTitleColor(.text_4, for: .normal)
- normal.titleLabel?.font = .heading_h4
- addSubview(normal)
- normal.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.leading.equalToSuperview().offset(4)
- make.height.equalTo(32)
- }
-
- edit.setTitle(.init(key: "A00161"), for: .normal)
- edit.setTitleColor(.text_5, for: .selected)
- edit.setTitleColor(.text_4, for: .normal)
- edit.titleLabel?.font = .heading_h4
- addSubview(edit)
- edit.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalToSuperview().offset(-4)
- make.height.equalTo(32)
- make.leading.equalTo(normal.snp.trailing).offset(3)
- make.width.equalTo(normal)
- }
-
- normal.addAction(UIAction(handler: { [weak self] _ in
- guard let self else { return }
- curType = .normal
- }), for: .touchUpInside)
- edit.addAction(UIAction(handler: { [weak self] _ in
- guard let self else { return }
- curType = .custom
- }), for: .touchUpInside)
- }
- }
|