如何将滑块值增加15?

时间:2019-06-24 19:03:29

标签: ios swift uislider

我有一个值为0,最小值0和最大值360(在实用程序区域中设置)的UISlider,并且我希望每次通过VoiceOver滑动时该值都增加15(间隔大小为15),并且每次滑动都能使其弹响。例如向右滑动一次-> 15,两次-> 30等。我一直在听滑块上的当前值在使用VoiceOver。

我已经尝试过类似的操作:

float interval = 5.0f;//set this
[slider setValue:interval*floorf((slider.value/interval)+0.5f) animated:NO]; 

来源:https://stackoverflow.com/a/2519573/11693942

我根据这段代码所做的事情是:

angle = Double(15 * floorf((sender.value/15) + 0.5))
sender.setValue(Float(angle), animated: true)

但这会使我的滑块增加30。

接下来,我尝试了:

angle = Double(15 * floorf((sender.value/30) + 0.5))
sender.setValue(Float(angle), animated: true)

这确实会使滑块增加15,但随后滑块被固定在30。我不能增加该值,但可以减小它。此时,VoiceOver还会说该值也是30。

我没有收到任何崩溃或错误消息。我的应用程序的其余部分仍然可以使用。

2 个答案:

答案 0 :(得分:0)

也许我误解了您的问题,但是slider.value = slider.value + 15.0呢?或slider.setValue(slider.value + 15.0, animated: true)(如果希望将其设置为动画)。

这是将滑块的值增加15的最简单方法。

答案 1 :(得分:0)

在队友的帮助下解决:)!关闭。

@IBAction func angleSliderChanged(_ sender: UISlider) {
        let roundingNumber: Float = (interval/2.0)
        angle = Double(sender.value)
        sender.accessibilityValue = "\(Int(angle)) degrees"

    sender.setValue(interval*floorf(((sender.value+roundingNumber)/interval)), animated:false)
    }