我想要的效果是,如果用户达到某个值,则滑块会自动滑动到最大值。从当前值到最大值的动画制作起来很容易,但是我陷入了一个问题,即滑块的拇指摇晃,导致用户以某种方式拖动它,但同时滑块值也设置了动画。这是我的代码:
@IBAction func sliderChange(_ sender: UISlider) {
if sender.value >= sender.maximumValue / 2{
sender.isUserInteractionEnabled = false
Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { timer in
sender.setValue(sender.value + 0.01, animated: true)
if sender.value >= sender.maximumValue{
timer.invalidate()
self.performSegue(withIdentifier: "MySegue", sender: nil)
}
})
}
}
很遗憾,isUserInteractionEnabled
在我需要时不起作用。我也尝试了失败:
sender.cancelTracking(with: nil)
和
for subview in sender.subviews{
subview.isUserInteractionEnabled = false
}
当用户拖动拇指时,必须以某种方式取消触摸事件。有人会重新建立这种行为还是可以在这里给我建议?
更新:
这里是一个快速展示,可以确定我的问题所在。
答案 0 :(得分:0)
@Stephan用以下代码替换您的代码,并检查它是否对我有用。
@IBAction func sliderChange(_ sender: UISlider) {
if sender.value >= sender.maximumValue / 2{
sender.isUserInteractionEnabled = false
Timer.scheduledTimer(withTimeInterval: 0.01, repeats: true, block: { timer in
sender.setValue(sender.value + 0.01, animated: true)
if sender.value >= sender.maximumValue{
timer.invalidate()
sender.isUserInteractionEnabled = true
} else if sender.value < 5{
timer.invalidate()
sender.isUserInteractionEnabled = true
}
})
}
}