重复之前CAKeyframeAnimation延迟

我有一个CAKeyframeAnimationanimation,我想重复使用repeatCount = HUGE_VALF永远。 animation的持续时间是2秒,但是我想在每个循环之前暂停3秒。

我能想到的唯一两种方法是:

  1. 使整个animation持续5秒钟,并添加额外的keyTimes和值,以便在5sanimation的最后3秒期间获得暂停。 这感觉有点哈克。

  2. 有animation只重复一次,然后添加使用像performSelector:afterDelay:2再次运行animation,等等。 这感觉也很脏。 也意味着我需要调用addAnimation:每5秒钟,我不知道是最佳的性能。

我还有其他的select吗? 这两种方法之一是否比其他方法好?

通过倾倒苹果的MKUserLocationView的animation,我能够看到他们是如何做的。 原来,这是CAAnimationGroup的用途。 通过将一个2秒的animation封装到一个5秒的animation组中,最后会有一个2秒的animation,然后是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"]; 

samvermette在Swift 3中的回答:

 let animationGroup = CAAnimationGroup() animationGroup.duration = 5; animationGroup.repeatCount = .infinity let easeOut = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) let pulseAnimation = CABasicAnimation(keyPath: "transform.scale.xy") pulseAnimation.fromValue = 0 pulseAnimation.toValue = 1.0 pulseAnimation.duration = 2 pulseAnimation.timingFunction = easeOut animationGroup.animations = [pulseAnimation] ringImageView.layer.add(animationGroup, forKey: "pulse")