前面我们已经学习了如何为一个单独的layer添加一些独立的动画,现在我们来介绍动画组CAAnimationGroup,添加彼此关联的动画。CAAnimationGroup也是继承至CAAnimation,如你所想,它也有前面你所熟知的一些属性,例如:beginTime、duration、fillMode、delegate和isRemovedOnCompletion。
let groupAnimation = CAAnimationGroup()
groupAnimation.beginTime = CACurrentMediaTime() + 0.5
groupAnimation.duration = 0.5
groupAnimation.fillMode = kCAFillModeBackwards
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]
groupAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
loginButton.layer.add(groupAnimation, forKey: nil)
这里出现了一个新的属性timingFunction——动画的时间函数。
时间函数通过几个枚举值来初始化(也可以通过贝塞尔曲线函数),用来控制动画的加速和减速效果。
kCAMediaTimingFunctionLinear:动画的整个时间内匀速执行
kCAMediaTimingFunctionEaseIn:淡入
kCAMediaTimingFunctionEaseOut:淡出
kCAMediaTimingFunctionEaseInEaseOut:淡入淡出