iOS – CoreAnimation笔记(3) – CAPropertyAnimation

CoreAnimation 学习笔记3 – CAPropertyAnimation

CAPropertyAnimation也是一个抽象类,自身并不能对layer进行动画操作,需要其子类CABasicAnimation和CAKeyframeAnimation来实现动画操作。

CAPropertyAnimation

// 可以指定CALayer的某个属性名,是CALayer的可动画Animatable属性。
open var keyPath: String?

// 多个动画效果是否叠加, 默认值为false
open var isAdditive: Bool

// 下一次动画执行是否接着刚才的动画,默认为false
open var isCumulative: Bool

// 专门为transform动画设置,默认是nil。例如绕Z轴旋转。也可以使用点语法设置keyPath的方式设置
open var valueFunction: CAValueFunction?

CAValueFunction

假如需要设置绕Z轴旋转,可以通过两种不同的方式来实现。

// 1. 通过设置valueFunction的方式设置
let ani = CABasicAnimation(keyPath: "transform")
ani.valueFunction = CAValueFunction(name: .rotateZ)
        
        
// 2. 通过点语法设置
let ani = CABasicAnimation(keyPath: "transform.rotation.z")

常用值

  • rotateX
  • rotateY
  • rotateZ
  • scale
  • scaleX
  • scaleY
  • scaleZ
  • translate
  • translateX
  • translateY
  • translateZ

CABasicAnimation

CAPropertyAnimation 的实体类。

// 
open var fromValue: Any?

// 
open var toValue: Any?

// 
open var byValue: Any?

CAKeyframeAnimation

关键帧动画,给定某个时间某个值,就可以实现平滑的过渡。

// 关键帧,会在指定时间依次显示每一个关键帧
open var values: [Any]?

// 动画路径,只对CALayer的anchorPoint和position起作用。 如果设置path,values会失效
open var path: CGPath?

// 为关键帧设置对应的时间点,取值范围0-1.0,如果不设置,则各关键帧时间平分
open var keyTimes: [NSNumber]?

// 每一段对应的速度控制函数
open var timingFunctions: [CAMediaTimingFunction]?

// 关键帧间插值计算模式,主要针对 对anchorPoint 和 position 进行的动画。当在平面座标系中有多个离散的点的时候,可以是离散的,也可以直线相连后进行插值计算,也可以使用圆滑的曲线将他们相连后进行插值计算
open var calculationMode: CAAnimationCalculationMode

// 控制曲线的“紧密度”(正值更紧,负值更圆)
open var tensionValues: [NSNumber]?

// 控制段的连接方式(正值表示锐角,负值表示倒角)
open var continuityValues: [NSNumber]?

// 定义曲线发生的位置(正值在控制点之前移动曲线,负值在控制点之后移动它)
open var biasValues: [NSNumber]?

// 定义沿路径动画的对象是否旋转以匹配路径切线.(默认nil)
// .rotateAuto  .rotateAutoReverse
open var rotationMode: CAAnimationRotationMode?

CASpringAnimation

弹簧动画

// 质量,影响图层运动时的弹簧惯性,质量越大,弹簧拉伸和压缩的幅度越大
open var mass: CGFloat

// 刚度系数(劲度系数/弹性系数),刚度系数越大,形变产生的力就越大,运动越快
open var stiffness: CGFloat

// 阻尼系数,阻止弹簧伸缩的系数,阻尼系数越大,停止越快
open var damping: CGFloat

// 初始速率,动画视图的初始速度大小
open var initialVelocity: CGFloat

// 估算时间 返回弹簧动画到停止时的估算时间,根据当前的动画参数估算
open var settlingDuration: CFTimeInterval { get }