我有一个UISlider,我想把它的值设置为1到10。我使用的代码是。

let slider = UISlider()
slider.value = 1.0
// This works I know that
slider.value = 10.0

我想做的是动画的UISlider,以便它需要0.5秒来改变。我不想让它变得更平滑。
到目前为止我的想法是。
let slider = UISlider()
slider.value = 1.0
// This works I know that
UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animation: { slider.value = 10.0 } completion: nil)

我正在迅速寻找解决办法。

最佳答案

编辑
经过一番讨论,我想澄清一下这两种建议的解决方案之间的区别:
使用内置的UISlider方法.setValue(10.0, animated: true)
将此方法封装在UIView.animateWithDuration中。
由于作者明确要求进行0.5秒的更改(可能由另一个操作触发),第二个解决方案是首选。
作为一个例子,考虑按钮连接到将滑块设置为其最大值的动作。

@IBOutlet weak var slider: UISlider!

@IBAction func buttonAction(sender: AnyObject) {
    // Method 1: no animation in this context
    slider.setValue(10.0, animated: true)

    // Method 2: animates the transition, ok!
    UIView.animateWithDuration(0.5, delay: 0.0, options: .CurveEaseInOut, animations: {
        self.slider.setValue(10.0, animated: true) },
        completion: nil)
}

运行一个只有UIVIewControllerUISlider对象的简单的UIButton应用程序会产生以下结果。
Method 1:即时幻灯片(即使animated: true
Method 2:设置转换动画。注意,如果在此上下文中设置animated: false,则转换将是即时的。

10-07 19:54
查看更多