IOS CABasicAnimation实现旋转动画
IOS CABasicAnimation实现旋转动画
定义一个CABasicAnimation
lazy var rotateAnimation: CABasicAnimation = {
let animation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.fromValue = 0
// animation.byValue = startAngle
animation.toValue = Double.pi * 2
animation.duration = 60
animation.autoreverses = false
animation.fillMode = .forwards
animation.repeatCount = MAXFLOAT
animation.isRemovedOnCompletion = false
return animation
}()
指定keyPath为transform.rotation.z
属性 | 说明 |
---|---|
duration | 动画的时长 |
repeatCount | 重复的次数。不停重复设置为 MAX_FLOAT |
repeatDuration | 设置动画的时间。在该时间内动画一直执行,不计次数。 |
beginTime | 指定动画开始的时间。从开始延迟几秒的话,设置为【CACurrentMediaTime() + 秒数】 的方式 |
timingFunction | 设置动画的速度变化 |
autoreverses | 动画结束时是否执行逆动画 |
fromValue | 所改变属性的起始值 |
toValue | 所改变属性的结束时的值 |
byValue | 所改变属性相同起始值的改变量 |
isRemovedOnCompletion | 是否在完成时移除 |
注意
fromValue toValue byValue 这三个值最多只能设置两个
设置不同属性的效果
- fromValue toValue 从fromValue到toValue
- fromValue byValue 从fromValue到fromValue+byValue
- byValue toValue 从toValue-byValue到toValue
- fromValue 从fromValue到当前对象的当前值
- toValue 从当前值到toValue
- byValue 从当前值到当前值+byValue
isRemovedOnCompletion默认为true,因为此动画layer是添加一个presentation layer,动画开始时原layer隐藏,动画结束时,presentation layer从屏幕上移除,原layer显示,设置为true的话有可能会在动画播放时app退到后台此presentation layer就被移除导致动画停止
fillMode
设置为.forward,动画将在结束之后保持最后一帧
添加动画
secView.layer.add(rotateAnimation, forKey: nil)
设置旋转中心
有时候可能不想让view以自己的中心点为原点旋转,比如可能是让它从右下角或者左下角,就需要设置layer的anchorPoint
All geometric manipulations to the view occur about the specified point
对视图的所有几何操作都发生在指定点附近
默认值为(0.5,0.5),也就是视图的中心点
设置(1,1)就是右下角,(0,1)就是左下角