IOS CABasicAnimation实现旋转动画

发布时间 2023-04-05 14:01:39作者: R1cardo

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
    }()

指定keyPathtransform.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)就是左下角