为什么我的UISlider动画?

时间:2015-03-06 19:36:21

标签: ios swift animation

根据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()
    }

}

resetSliderTouch Up Inside事件相关联。

问题

当调用resetSlider时,接口上的值确实会发生变化,但它不会设置动画(该值只是"跳转"为0)。我的目标是让价值优雅地回归到零。

注意:"重置!"仅显示一次(每次点击),表示resetSlider未被多次调用。

为什么这个UISlider没有动画?

视频

由于IB是如此直观,here is a video的情况,密码为code

2 个答案:

答案 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。