Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import UIKit
import Shared
import SnapKit
final class SearchSegmentedControl: UIView {
private let trackView = UIView()
private let stackView = UIStackView()
private var leftConstraint: Constraint?
private let trackIndicatorView = UIView()
private(set) var usernameButton = SearchSegmentedButton()
private(set) var emailButton = SearchSegmentedButton()
private(set) var phoneButton = SearchSegmentedButton()
private(set) var qrCodeButton = SearchSegmentedButton()
init() {
super.init(frame: .zero)
trackView.backgroundColor = Asset.neutralLine.color
trackIndicatorView.backgroundColor = Asset.brandPrimary.color
qrCodeButton.titleLabel.text = Localized.Ud.Tab.qr
emailButton.titleLabel.text = Localized.Ud.Tab.email
phoneButton.titleLabel.text = Localized.Ud.Tab.phone
usernameButton.titleLabel.text = Localized.Ud.Tab.username
usernameButton.titleLabel.textColor = Asset.brandPrimary.color
emailButton.titleLabel.textColor = Asset.neutralDisabled.color
phoneButton.titleLabel.textColor = Asset.neutralDisabled.color
qrCodeButton.titleLabel.textColor = Asset.neutralDisabled.color
usernameButton.imageView.tintColor = Asset.brandPrimary.color
emailButton.imageView.tintColor = Asset.neutralDisabled.color
phoneButton.imageView.tintColor = Asset.neutralDisabled.color
qrCodeButton.imageView.tintColor = Asset.neutralDisabled.color
qrCodeButton.imageView.image = Asset.searchTabQr.image
emailButton.imageView.image = Asset.searchTabEmail.image
phoneButton.imageView.image = Asset.searchTabPhone.image
usernameButton.imageView.image = Asset.searchTabUsername.image
stackView.addArrangedSubview(usernameButton)
stackView.addArrangedSubview(emailButton)
stackView.addArrangedSubview(phoneButton)
stackView.addArrangedSubview(qrCodeButton)
stackView.distribution = .fillEqually
stackView.backgroundColor = Asset.neutralWhite.color
addSubview(stackView)
addSubview(trackView)
trackView.addSubview(trackIndicatorView)
stackView.snp.makeConstraints {
$0.edges.equalToSuperview()
}
trackView.snp.makeConstraints {
$0.left.equalToSuperview()
$0.right.equalToSuperview()
$0.bottom.equalToSuperview()
$0.height.equalTo(2)
}
trackIndicatorView.snp.makeConstraints {
$0.top.equalToSuperview()
leftConstraint = $0.left.equalToSuperview().constraint
$0.width.equalToSuperview().dividedBy(4)
$0.bottom.equalToSuperview()
}
}
required init?(coder: NSCoder) { nil }
func updateSwipePercentage(_ percentageScrolled: CGFloat) {
let amountOfTabs = 4.0
let tabWidth = bounds.width / amountOfTabs
let leftOffset = percentageScrolled * tabWidth
leftConstraint?.update(offset: leftOffset)
let usernamePercentage = percentageScrolled > 1 ? 1 : percentageScrolled
let phonePercentage = percentageScrolled <= 1 ? 0 : percentageScrolled - 1
let emailPercentage = percentageScrolled > 1 ? 1 - (percentageScrolled-1) : percentageScrolled
let qrPercentage = percentageScrolled > 1 ? 1 - (percentageScrolled-1) : percentageScrolled
let usernameColor = UIColor.fade(
from: Asset.brandPrimary.color,
to: Asset.neutralDisabled.color,
pcent: usernamePercentage
)
let emailColor = UIColor.fade(
from: Asset.neutralDisabled.color,
to: Asset.brandPrimary.color,
pcent: emailPercentage
)
let phoneColor = UIColor.fade(
from: Asset.neutralDisabled.color,
to: Asset.brandPrimary.color,
pcent: phonePercentage
)
let qrColor = UIColor.fade(
from: Asset.brandPrimary.color,
to: Asset.neutralDisabled.color,
pcent: qrPercentage
)
usernameButton.imageView.tintColor = usernameColor
usernameButton.titleLabel.textColor = usernameColor
emailButton.imageView.tintColor = emailColor
emailButton.titleLabel.textColor = emailColor
phoneButton.imageView.tintColor = phoneColor
phoneButton.titleLabel.textColor = phoneColor
qrCodeButton.imageView.tintColor = qrColor
qrCodeButton.titleLabel.textColor = qrColor
}
}