UISlider that snaps to a fixed number of steps (like Text Size in the iOS 7 Settings app)

前端 未结 6 2208
情深已故
情深已故 2020-12-04 06:31

I\'m trying to create a UISlider that lets you choose from an array of numbers. Each slider position should be equidistant and the slider should snap to each po

6条回答
  •  Happy的楠姐
    2020-12-04 06:54

    This worked for my particular case, using @IBDesignable:

    Requires even, integer intervals:

    @IBDesignable
    class SnappableSlider: UISlider {
    
        @IBInspectable
        var interval: Int = 1
    
        override init(frame: CGRect) {
            super.init(frame: frame)
            setUpSlider()
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            setUpSlider()
        }
    
        private func setUpSlider() {
            addTarget(self, action: #selector(handleValueChange(sender:)), for: .valueChanged)
        }
    
        @objc func handleValueChange(sender: UISlider) {
            let newValue =  (sender.value / Float(interval)).rounded() * Float(interval)
            setValue(Float(newValue), animated: false)
        }
    }
    

提交回复
热议问题