核心动画 - 按顺序播放2个动画

时间:2013-04-03 22:15:35

标签: ios animation

我正在尝试将有点像速度计的动画放在一起。

第一个动画获得针

CFTimeInterval localMediaTime = [needle convertTime:CACurrentMediaTime() fromLayer:nil];

CABasicAnimation *needAni = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
needAni.duration = 0.5f;
needAni.fromValue = [NSNumber numberWithFloat:0.0];
needAni.toValue = [NSNumber numberWithFloat:(rotVal * M_PI / 180.0)];
needAni.timingFunction = [CAMediaTimingFunction functionWithControlPoints:0.195: 0.600: 0.790: 0.405];
needAni.fillMode = kCAFillModeBackwards;

[needle.layer addAnimation:needAni forKey:nil];

在播放之后我想让针在达到全速时来回弹跳一下。这个动画就是这样:

CABasicAnimation *needAni2 = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
needAni2.duration = 0.1f;
needAni2.fromValue = [NSNumber numberWithFloat:(rotVal * M_PI / 180.0)];
needAni2.toValue = [NSNumber numberWithFloat:((rotVal+5) * M_PI / 180.0)];
needAni2.fillMode = kCAFillModeBackwards;
needAni2.autoreverses = YES;
needAni2.repeatCount = HUGE_VAL;
needAni2.beginTime = localMediaTime + 0.5f;

[needle.layer addAnimation:needAni2 forKey:nil];

现在当我把它放在一起时,只播放第二个动画。

我厌倦了把这两个动画放到一个组中,但我似乎不能重复第二个动画,它重复整个过程。如果我将组持续时间等于HUGE_VAL或是否有更好的方法来执行此操作,是否存在性能问题?

由于

1 个答案:

答案 0 :(得分:0)

我认为您可以坚持使用您的方法,因为这似乎是CAGroupAnimation的预期用法。只需确保为该组设置适当的持续时间。如果您使群组的持续时间短于预期的动画,则会缩短您的动画时间。如果持续时间超过动画,则动画对象可能会在内存中停留,直到持续时间结束。

另一种选择是实现委托方法-animationDidStop:finished :,并在第一个动画调用第二个动画时添加第二个动画。

CAAnimation参考: https://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html#//apple_ref/occ/cl/CAAnimation