如何为多个属性创建CABasicAnimation?

Mc-*_*Mc- 32 animation core-animation caanimation ios

我有这个代码来动画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];
Run Code Online (Sandbox Code Playgroud)

我的问题是,现在一切正常,我想同时使用同一元素的另一个属性.我见过你可以做添加动画和东西.

我的问题是:

  • 添加剂属性是最好/唯一的方法吗?(一次动画同一对象的多个属性)

谢谢!

Dav*_*ist 66

您可以在其上创建CAAnimationGroup并自定义持续时间和计时功能.然后创建所有CABasicAnimations,将它们设置为值并将它们添加到动画组.最后,将动画组添加到要设置动画的图层.

这是一个例子:

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"];
Run Code Online (Sandbox Code Playgroud)

  • 请注意,组中的所有动画必须对同一图层进行更改.我发现您无法使用CAAnimationGroup对应用于不同图层的动画进行分组. (26认同)
  • 我们需要设置"组"持续时间吗?如果我希望每个动画都有自己的持续时间怎么办? (5认同)
  • 如果要实现某种分组,但每个动画都为不同的图层设置动画(CAAnimationGroup在这种情况下不起作用),请改用CATransaction. (2认同)

Aar*_*eng 6

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)
Run Code Online (Sandbox Code Playgroud)

这是swift(swift 3)的最新更新。您的代码应在末尾包含一个对象,即UIButton,UILabel,您可以对其进行动画处理。在我的代码中是loginButton(即标题或名称)。