iOS-当使用者达到特定值时,自动将UISlider滑动至最大值

时间:2019-02-01 10:04:33

标签: ios swift uislider

我想要的效果是,如果用户达到某个值,则滑块会自动滑动到最大值。从当前值到最大值的动画制作起来很容易,但是我陷入了一个问题,即滑块的拇指摇晃,导致用户以某种方式拖动它,但同时滑块值也设置了动画。这是我的代码:

@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
}

当用户拖动拇指时,必须以某种方式取消触摸事件。有人会重新建立这种行为还是可以在这里给我建议?

更新:

这里是一个快速展示,可以确定我的问题所在。

illustration

1 个答案:

答案 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
                }
            })
        }

    }

检查此gif GIF