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还提供了其他方法来定义时序曲线。

  1. 提供两个控制点以定义三次贝塞尔曲线。
 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
}
  1. 提供dampingRatio值以定义基于弹簧的时序曲线。
 let animator = UIViewPropertyAnimator(duration: 4.0, dampingRatio: 0.5) { 
redRect.center.x = 300
}
  1. 提供一个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()
  1. 提供一个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类构建的强大而直接的动画框架”。