根据Apple的documentation,可以通过编程方式设置具有平滑动画的UISlider的值。我尝试从自定义视图控制器执行此操作,UI正在从故事板中定义。
上下文
在我的示例中,我尝试从自定义视图控制器更新滑块值,正在从故事板中定义UI。该示例仅呈现单个滑块。
当用户释放滑块时,该值将重置为0
。
守则
import UIKit
class ViewController: UIViewController {
@IBOutlet var mySlider: UISlider!
@IBAction func resetSlider() {
mySlider.setValue(0, animated:true)
NSLog("Reset!")
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
resetSlider
与Touch Up Inside
事件相关联。
问题
当调用resetSlider
时,接口上的值确实会发生变化,但它不会设置动画(该值只是"跳转"为0)。我的目标是让价值优雅地回归到零。
注意:"重置!"仅显示一次(每次点击),表示resetSlider
未被多次调用。
为什么这个UISlider没有动画?
视频
由于IB是如此直观,here is a video的情况,密码为code
答案 0 :(得分:40)
setValue animated
参数实际上并不执行动画,而是启用动画。
要触发动画,您需要使用UIView.animateWithDuration,并将setValue命令作为动画传递:
UIView.animateWithDuration(0.2, animations: {
self.mySlider.setValue(0, animated:true)
})
答案 1 :(得分:0)
@Slifty的解决方案是正确的。但是如果你想让UISlider像defauft一样平滑,那么你可以将动画时间减少到0.2以下。它可以工作,如0.1 / 2或0.1 / 3。