我怎样才能为多个属性创build一个CABasicAnimation?

我有这个代码来animation一个CALayer元素。

CABasicAnimation *makeBiggerAnim=[CABasicAnimation animationWithKeyPath:@"radius"]; makeBiggerAnim.duration=0.2; makeBiggerAnim.fromValue=[NSNumber numberWithDouble:20.0]; makeBiggerAnim.toValue=[NSNumber numberWithDouble:40.0]; makeBiggerAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 

我的问题是,现在一切正常,我想在同一时间的同一元素的另一个属性。 我见过你可以做添加剂animation和东西。

我的问题是:

  • 添加剂属性是最好的/唯一的方法来做到这一点? (立刻animation同一个对象的多个属性)

谢谢!

您可以创build一个CAAnimationGroup并自定义持续时间和计时function。 然后创build所有CABasicAnimations ,将它们设置为值并将它们添加到animation组中。 最后,将animation组添加到您正在animation的图层中。

这里是一个例子:

 CABasicAnimation *makeBiggerAnim=[CABasicAnimation animationWithKeyPath:@"cornerRadius"]; makeBiggerAnim.fromValue=[NSNumber numberWithDouble:20.0]; makeBiggerAnim.toValue=[NSNumber numberWithDouble:40.0]; CABasicAnimation *fadeAnim=[CABasicAnimation animationWithKeyPath:@"opacity"]; fadeAnim.fromValue=[NSNumber numberWithDouble:1.0]; fadeAnim.toValue=[NSNumber numberWithDouble:0.0]; CABasicAnimation *rotateAnim=[CABasicAnimation animationWithKeyPath:@"transform.rotation.y"]; rotateAnim.fromValue=[NSNumber numberWithDouble:0.0]; rotateAnim.toValue=[NSNumber numberWithDouble:M_PI_4]; // Customizing the group with duration etc, will apply to all the // animations in the group CAAnimationGroup *group = [CAAnimationGroup animation]; group.duration = 0.2; group.repeatCount = 3; group.autoreverses = YES; group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; group.animations = @[makeBiggerAnim, fadeAnim, rotateAnim]; [myLayer addAnimation:group forKey:@"allMyAnimations"]; 
 let groupAnimation = CAAnimationGroup() groupAnimation.beginTime = CACurrentMediaTime() + 0.5 groupAnimation.duration = 0.5 let scaleDown = CABasicAnimation(keyPath: "transform.scale") scaleDown.fromValue = 3.5 scaleDown.toValue = 1.0 let rotate = CABasicAnimation(keyPath: "transform.rotation") rotate.fromValue = .pi/10.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) 

这是swift上的最新更新(swift 3)。 你的代码应该在最后包含一个对象,例如UIButton,UILabel,你可以animation的东西。 在我的代码中是loginButton(这是标题或名称)。

Swift-3中,我们可以使用CAAnimationGroup ,如下所示:

  let position = CAKeyframeAnimation(keyPath: "position") position.values = [ NSValue.init(cgPoint: .zero) , NSValue.init(cgPoint: CGPoint(x: 0, y: -20)) , NSValue.init(cgPoint: .zero) ] position.timingFunctions = [ CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut), CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) ] position.isAdditive = true position.duration = 1.2 let rotation = CAKeyframeAnimation(keyPath: "transform.rotation") rotation.values = [ 0, 0.14, 0 ] rotation.duration = 1.2 rotation.timingFunctions = [ CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut), CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) ] let fadeAndScale = CAAnimationGroup() fadeAndScale.animations = [ position, rotation] fadeAndScale.duration = 1