我有一个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)
我正在寻找Swift中的解决方案。
答案 0 :(得分:8)
<强> EDITED 强>
经过一番讨论,我认为我澄清了两种建议解决方案之间的差异:
.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)
}
仅使用UIVIewController
和UISlider
对象运行一个简单的单UIButton
个应用程序会产生以下结果。
答案 1 :(得分:1)
@ dfri的答案问题是蓝色最小追踪器正在从100%移动到该值,所以为了解决这个问题,你需要稍微改变一下方法:
extension UISlider
{
///EZSE: Slider moving to value with animation duration
public func setValue(value: Float, duration: Double) {
UIView.animateWithDuration(duration, animations: { () -> Void in
self.setValue(self.value, animated: true)
}) { (bol) -> Void in
UIView.animateWithDuration(duration, animations: { () -> Void in
self.setValue(value, animated: true)
}, completion: nil)
}
}
}