1. 创建动画组
// 创建组动画
let groupAnimation = CAAnimationGroup()
groupAnimation.beginTime = CACurrentMediaTime() + 0.5
groupAnimation.duration = 0.5
groupAnimation.fillMode = kCAFillModeBackwards
/**
1. “子动画”不需要在设置duration、fillMode等属性
2. “子动画”的duration、fillMode将使用“组动画”的设置
*/
// 缩放效果(创建子动画)
let scaleDown = CABasicAnimation(keyPath: "transform.scale")
scaleDown.fromValue = 3.5
scaleDown.toValue = 1.0
// 旋转效果(创建子动画)
let rotate = CABasicAnimation(keyPath: "transform.rotation")
rotate.fromValue = .pi / 4.0
rotate.toValue = 0.0
// 透明度变化效果(创建子动画)
let fade = CABasicAnimation(keyPath: "opacity")
fade.fromValue = 0.0
fade.toValue = 1.0
// 组合动画(将子动画组合到组动画中)
groupAnimation.animations = [scaleDown, rotate, fade]
loginButton.layer.add(groupAnimation, forKey: nil)
2. Layer动画缓和
CAMediaTimingFunction有一些预定义的缓动函数,您可以按名称使用它们:
• kCAMediaTimingFunctionLinear:匀速运行整个动画。
• kCAMediaTimingFunctionEaseIn:整个动画,先慢后快。效果如下图所示:
kCAMediaTimingFunctionEaseIn.png
• kCAMediaTimingFunctionEaseOut:效果与kCAMediaTimingFunctionEaseIn相反,
整个动画,先快后慢。效果如下图所示:
kCAMediaTimingFunctionEaseOut.png
• kCAMediaTimingFunctionEaseInEaseOut:整个动画,开始和结束慢,中间快。
效果如下图所示:
kCAMediaTimingFunctionEaseInEaseOut.png
设置“组动画”动画缓和,例子如下:
// 设置动画缓和
groupAnimation.timingFunction =
CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
3. Layer动画重复
如下属性设置动画重复:
repeatCount:设置动画重复次数
repeatDuration:设置重复动画总时间,与repeatCount选择其一即可。
autoreverses:设置是否在一次动画完成后,反向播放动画。
例子如下:
flyLeft.duration = 5.0
flyLeft.repeatCount = 4
4. Layer动画速度
// 设置动画的速度
flyLeft.speed = 2.0
// 设置图层的速度
/**
当你的改变图层的速度时,图层中所有的动画的速度也会因此而改变,而且为乘积关系。
*/
info.layer.speed = 2.0