首页 文章

为什么我的UISlider不是动画?

提问于
浏览
10

根据Apple的documentation,可以通过编程方式设置具有平滑动画的UISlider的值 . 我试图从自定义视图控制器执行此操作,UI正在从故事板中定义 .

The Context

在我的示例中,我试图从自定义视图控制器更新滑块值,UI正在从故事板中定义 . 该示例仅呈现单个滑块 .

当用户释放滑块时,该值将重置为 0 .

The Code

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 事件 .

The Problem

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

注意:"Reset!"仅显示一次(每次单击),这表示 resetSlider 未被多次调用 .

为什么这个UISlider没有动画?

The Video

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

2 回答

  • 38

    setValue animated 参数实际上不执行动画,而是启用动画 .

    要触发动画,您需要使用UIView.animateWithDuration,并将setValue命令作为动画传递:

    UIView.animateWithDuration(0.2, animations: {
      self.mySlider.setValue(0, animated:true)
    })
    
  • 0

    @Slifty的解决方案是正确的 . 但是如果你想让UISlider像defauft一样平滑,那么你可以将动画时间减少到0.2以下 . 它可以工作,如0.1 / 2或0.1 / 3 .

相关问题