UISlider 设置值
UISlider set value
我有一个 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 中寻找解决方案。
已编辑
经过一些讨论,我想我应该澄清两个建议解决方案之间的区别:
- 使用内置的 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)
}
运行 一个只有 UISlider
和 UIButton
对象的简单单个 UIVIewController
应用程序会产生以下结果。
@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)
}
}
}
我有一个 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 中寻找解决方案。
已编辑
经过一些讨论,我想我应该澄清两个建议解决方案之间的区别:
- 使用内置的 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)
}
运行 一个只有 UISlider
和 UIButton
对象的简单单个 UIVIewController
应用程序会产生以下结果。
@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)
}
}
}