我有一个CAKeyframeAnimation
动画,我想使用repeatCount = HUGE_VALF
重复一遍。动画的持续时间为2秒,但我想在每个循环前暂停3秒。
我可以想到的仅有2种方法是:
performSelector:afterDelay:2
之类的东西来再次运行动画,依此类推。这也很脏。这也意味着我需要每5秒调用一次addAnimation:
,我不确定这在性能上是否最佳。 我还有其他选择吗?这两种方法中的一种优于另一种吗?
最佳答案
通过转储Apple的MKUserLocationView
的动画,我能够看到它们的运行方式。原来,这就是CAAnimationGroup
的用途。通过将2秒的动画封装到5秒的动画组中,您将得到2秒的动画和3秒的延迟:
CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
animationGroup.duration = 5;
animationGroup.repeatCount = INFINITY;
CAMediaTimingFunction *easeOut = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
CABasicAnimation *pulseAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.xy"];
pulseAnimation.fromValue = @0.0;
pulseAnimation.toValue = @1.0;
pulseAnimation.duration = 2;
pulseAnimation.timingFunction = easeOut;
animationGroup.animations = @[pulseAnimation];
[ringImageView.layer addAnimation:animationGroup forKey:@"pulse"];