CNLiveSwitchView.swift
4.84 KB
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
//
// CNLiveSwitchView.swift
// metaCode
//
// Created by zx on 2023/11/14.
// 商品列表 - 上架,下架Switch
import Foundation
typealias switchClickBlock = (_ index:Int)->Void
class CNLiveSwitchView: UIView {
//开关点击回调
var switchBlock:switchClickBlock?
/// 未选中背景颜色 无默认
var _unselectedBgColor:UIColor?
var unselectedBgColor:UIColor?{
get{
_unselectedBgColor
}
set{
_unselectedBgColor = newValue
self.resetUI()
}
}
/// 选中背景颜色 无默认
var _selectedBgColor:UIColor?
var selectedBgColor:UIColor?{
get{
_selectedBgColor
}
set{
_selectedBgColor = newValue
self.resetUI()
}
}
/// 未选中颜色 无默认
var _unselectedTitleColor:UIColor?
var unselectedTitleColor:UIColor?{
get{
_unselectedTitleColor
}
set{
_unselectedTitleColor = newValue
self.resetUI()
}
}
/// 选中颜色 无默认
var _selectedTitleColor:UIColor?
var selectedTitleColor:UIColor?{
get{
_selectedTitleColor
}
set{
_selectedTitleColor = newValue
self.resetUI()
}
}
/// 标题 无默认
var _titleFont:UIFont?
var titleFont:UIFont?{
get{
_titleFont
}
set{
_titleFont = newValue
self.resetUI()
}
}
/// 选中的索引 默认0
var _selectIndex:Int = 0
var selectIndex:Int{
get{
_selectIndex
}
set{
_selectIndex = newValue
self.resetUI()
}
}
/// 标题数组 无默认
var _titles:NSArray = []
var titles:NSArray{
get{
_titles
}
set{
_titles = newValue
self.resetUI()
}
}
/// 角度 无默认
var _radius:CGFloat = 0.0
var radius:CGFloat{
get{
_radius
}
set{
_radius = newValue
self.resetUI()
}
}
lazy var bgView :CNLiveRoundedRectView = {
let bgView = CNLiveRoundedRectView()
return bgView
}()
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = .clear
self.setUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func layoutSubviews() {
super.layoutSubviews()
self.bgView.frame = CGRect(x: 0, y: 0, width: self.width, height: self.height)
self.bgView.layer.cornerRadius = self.height/2
self.bgView.clipsToBounds = true
let titlesCount = CGFloat(self.titles.count)
let width = self.width/titlesCount
for i in 0..<self.titles.count {
let titleBgView = self.bgView.viewWithTag((i+1)*100+1) as! CNLiveRoundedRectView
let titleBtn = self.bgView.viewWithTag((i+1)*100+2) as! UIButton
titleBgView.frame = CGRect(x: CGFloat(i)*width, y: 0, width: width, height: self.height)
titleBtn.frame = CGRect(x: CGFloat(i)*width, y: 0, width: width, height: self.height)
}
}
func setUI(){
self.bgView = CNLiveRoundedRectView(frame: CGRectZero)
self.bgView.backgroundColor = UIColor(hue:0.00, saturation:0.00, brightness:0.94, alpha:1.00)
self.addSubview(self.bgView)
}
func resetUI(){
self.bgView.subviews.forEach {$0.removeFromSuperview()}
for i in 0..<self.titles.count {
let titleBgView = CNLiveRoundedRectView.init()
titleBgView.tag = (i+1)*100+1
titleBgView.radius = self.radius
self.bgView.addSubview(titleBgView)
let titleBtn = UIButton(type: .custom)
titleBtn.setTitle((self.titles[i] as! String), for: .normal)
titleBtn.titleLabel?.font = self.titleFont
titleBtn.addTarget(self, action: #selector(titleBtnClick), for: .touchUpInside)
titleBtn.tag = (i+1)*100+2
self.bgView.addSubview(titleBtn)
if self.selectIndex == i{
titleBgView.fillColor = self.selectedBgColor
titleBtn.setTitleColor(self.selectedTitleColor, for: .normal)
}else{
titleBgView.fillColor = self.unselectedBgColor
titleBtn.setTitleColor(self.unselectedTitleColor, for: .normal)
}
}
self.layoutSubviews()
}
@objc func titleBtnClick(sender:UIButton){
let selectIndex = (sender.tag-2)/100-1
if self.selectIndex == selectIndex {
return
}
if ((self.switchBlock) != nil) {
self.switchBlock!(selectIndex)
}
}
}