我有一个值为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。
我没有收到任何崩溃或错误消息。我的应用程序的其余部分仍然可以使用。
答案 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)
}