UISlider
UISlider 的使用
1
2let slider = UISlider()
3// 设置滑块的最小值
4slider.minimumValue = 0
5// 设置滑块的最大值
6slider.maximumValue = 1
7// 设置滑块的当前值
8slider.value = 0.5
9// 有动画效果的设置滑块值
10slider.setValue(0.5, animated: true)
改变 Slider 的外观
1// 滑块最小值的图标,位于最左侧位置
2slider.minimumValueImage
3// 滑块最大值的图标,位于最右侧位置
4slider.maximumValueImage
5// 滑块拇指的着色颜色
6slider.thumbTintColor
7// 滑块起始位置到滑块位置的着色颜色
8slider.minimumTrackTintColor
9// 滑块的位置到滑块结束位置的着色颜色
10slider.maximumTrackTintColor
改变 Slider 的交互行为
1// 滑块值变化时是否连续触发更新事件,当为 false 时滑块值变化结束后才会触发,这对非及时更新功能场景很有用
2slider.isContinuous = true
3slider.behavioralStyle
4slider.preferredBehavioralStyle
在滑块的位置添加其他 View
1class CustomSlider: UISlider {
2 private lazy var overlayView: UIView = {
3 let view = UIView()
4 view.backgroundColor = .red
5 // 将叠加视图的用户交互关闭
6 view.isUserInteractionEnabled = false
7 reture view
8 }()
9
10 /// 初始化方法
11 override init(frame: CGRect) {
12 super.init(frame: frame)
13 //以 thumbImg 的大小修改 Slider 的 thumb 大小
14 self.setThumbImage(UIImage(named: "thumbImg"), for: .normal);
15 }
16
17 required init?(coder: NSCoder) {
18 fatalError("init(coder:) has not been implemented")
19 }
20
21 /// 重写滑块拇指大小的方法
22 override func thumbRect(forBounds bounds: CGRect, trackRect rect: CGRect, value: Float) -> CGRect {
23 let r = super.thumbRect(forBounds: bounds, trackRect: rect, value: value)
24 // 将叠加视图的 frame 改为滑块拇指的 frame,这样就能达到叠加视图根据滑块拇指位置及时更新
25 overlayView.frame = r
26 return r
27 }
28
29 /// 将用户交互事件穿透到 UISlider 上
30 override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
31 let view = super.hitTest(point, with: event)
32 if view == overlayView {
33 return nil
34 }
35 return view
36 }
37
38}