©️ OverlookArt
首页 / AppleDevelop / UIKit / UISlider

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}