iOS how to make slider stop at discrete points

后端 未结 5 2267
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-13 06:21

I would like to make a slider stop at discrete points that represent integers on a timeline. What\'s the best way to do this? I don\'t want any values in between. It woul

5条回答
  •  臣服心动
    2020-12-13 06:35

    Swift version with ValueChanged and TouchUpInside.

    EDIT: Actually you should hook up 3 events in this case:

    yourSlider.addTarget(self, action: #selector(presetNumberSliderTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel])
    

    I've just pasted my code, but you can easily see how it's done.

    private func setSizesSliderValue(pn: Int, slider: UISlider, setSliderValue: Bool)
    {
        if setSliderValue
        {
            slider.setValue(Float(pn), animated: true)
        }
    
        masterPresetInfoLabel.text = String(
            format: TexturingViewController.createAndSendPresetNumberNofiticationTemplate,
            self.currentPresetNumber.name.uppercased(),
            String(self.currentPresetNumber.currentUserIndexHumanFriendly)
        )
    }
    
    @objc func presetNumberSliderTouchUp(_ sender: Any)
    {
        guard let slider = sender as? NormalSlider else{
            return
        }
    
        setupSliderChangedValuesGeneric(slider: slider, setSliderValue: true)
    }
    
    private func setupSliderChangedValuesGeneric(slider: NormalSlider, setSliderValue: Bool)
    {
        let rounded = roundf((Float(slider.value) / Float(presetNumberStep))) * Float(presetNumberStep)
    
        // Set new preset number value
        self.currentPresetNumber.current = Int(rounded)
        setSizesSliderValue(pn: Int(rounded), slider: slider, setSliderValue: setSliderValue)
    }
    
    @IBAction func presetNumberChanged(_ sender: Any)
    {
        guard let slider = sender as? NormalSlider else{
            return
        }
    
        setupSliderChangedValuesGeneric(slider: slider, setSliderValue: false)
    }
    

提交回复
热议问题