Swift World:UIViewPropertyAnimator探索第3部分
正如我们在第2部分中提到的那样,我们将在本部分中讨论时序曲线。 让我们先回到过去。 在UIView的基于块的动画中,可以选择设置时间曲线,例如EaseInOut,EaseIn,EaseOut和Linear。 时间曲线,时间函数或缓动函数是指定义动画变化率的函数。 例如Talk便宜,给我看动画。
并告诉我代码。
UIView.animate(withDuration: 4.0, delay: 0, options: [.curveEaseInOut], animations: {
redRect.center.x = 300
}, completion: nil)
选项.curveEaseInOut显示动画中的时序曲线选项。
对于CAAnimation,对应的属性是TimingFunction,它是CAMediaTimingFunction。 为了获得相同的easeInOut效果,代码如下。
let animation = CABasicAnimation()
animation.keyPath = "position.x"
animation.fromValue = redRect.center.x
animation.toValue = 300
animation.duration = 4
animation.timingFunction = CAMediaTimingFunction(name:
kCAMediaTimingFunctionEaseInEaseOut)
redRect.layer.add(animation, forKey: "EaseInOut")
对于UIViewPropertyAnimator,我们还可以在创建实例时简单地设置一条曲线。
let animator = UIViewPropertyAnimator(duration: 4.0, curve: .easeInOut) {
redRect.center.x = 300
}
您可以将值更改为easeInOut,easyIn,easyOut或线性,以获取不同的效果。
UIViewProperty还提供了其他方法来定义时序曲线。
- 提供两个控制点以定义三次贝塞尔曲线。
let animator = UIViewPropertyAnimator(duration: 4.0, controlPoint1: CGPoint(x: 0.17, y: 0.52), controlPoint2: CGPoint(x: 0.83, y: 0.67)) {
redRect.center.x = 300
}
- 提供dampingRatio值以定义基于弹簧的时序曲线。
let animator = UIViewPropertyAnimator(duration: 4.0, dampingRatio: 0.5) {
redRect.center.x = 300
}
- 提供一个UITimingCurveProvider来定义三次曲线
let cubicTimingParameters: UITimingCurveProvider = UICubicTimingParameters(controlPoint1: CGPoint(x: 0.0, y: 1.0), controlPoint2: CGPoint(x: 1.0, y: 0.0))
let animator = UIViewPropertyAnimator(duration: 4.0, timingParameters: cubicTimingParameters)
animator.addAnimations {
redRect.center.x = 300
}
animator.startAnimation()
- 提供一个UITimingCurveProvider来定义弹簧计时
let springTimingParameters: UITimingCurveProvider = UISpringTimingParameters(dampingRatio: 0.5,initialVelocity: CGVector(dx:1.0, dy: 0.0))
let animator = UIViewPropertyAnimator(duration: 4.0, timingParameters: springTimingParameters)
animator.addAnimations {
redRect.center.x = 300
}
animator.startAnimation()
在下一部分中,我们将介绍一个第三方框架[Dance}(https://github.com/saoudrizwan/Dance),它是“基于新的UIViewPropertyAnimator类构建的强大而直接的动画框架”。