UIViewPropertyAnimator
UIViewPropertyAnimator
Demo
结论
先说一下对别的结论,然后列出代码。
- 优点:
- 1、精细控制动画状态 start pase stop finish
- 2、精细控制动画进度 fractionComplete
- 3、可以中间加入动画 addAnimations
- 4、自定义 curve
- 缺点:
- 1、无法重复动画: .repeat 无效(-iOS12)
- 2、无法自动翻转动画: .autoreverse 无效(-iOS12)
UIView.animationDuration:…
1 | UIView.animate( |
UIViewPropertyAnimator
iOS 10 以后 Apple 新加入的动画 API,主要用来取代 UIView.animationWithDuration:…
- 类似 [UIView animationWithDuration:…] 的使用形式
UIViewPropertyAnimator 也可以按照旧式的 UIView.animationWithDuration:… 的形式调用。
1 | UIViewPropertyAnimator.runningPropertyAnimator( |
- 创建对象
Apple 提供了三种快速创建的方法。
1 | // 设置 duration 、 cureve 和 animation, 创建 UIViewPropertyAnimator |
如果还是未能满足,可以通过自定义创建动画曲线。
1 | public init(duration: TimeInterval, timingParameters parameters: UITimingCurveProvider) |
动画状态
Inactive
对象初始化或者动画结束后所处的状态。Active
在调用 startAnimation() 、 pauseAnimation() 方法后对象就处于激活状态,直到动画完成或者手动调用 stopAnimation() 结束动画。Stopped
在 stopAnimation() 被调用之后动画对象就处于停止状态,并且保留当前的所有属性值。如下图所示,停止状态无法反向回到激活态。
添加新动画
UIViewPropertyAnimator 可以在中途加入新的动画。
1 | //The duration of the animation will be (1 - delayFactor) * animator.duration seconds. |
- 动画结束
1 | //UIViewAnimatingPosition,用于表明动画结束的位置,这个值本身是一个枚举,包含了 starting、end 和 current。通常得到的值是 end。 |
- 控制动画进度
注意,只能在动画处于 inactive 和 active 的时候,可以控制。
1 | @IBAction func changeAnimator(_ sender: UISlider) { |
UIViewPropertyAnimator