2012-04-15 40 views
5

在我的iOS 5应用程序中,我有一个自定义UIButton,它有一个红色的圆球作为它的图像。当按下按钮时,我希望圆球在红色和绿色之间开始脉冲/淡入淡出。我有红色和绿色的图像,并且可以成功地在两者之间使用下面的代码跨disolve:使用核心动画循环,可逆动画

CABasicAnimation *imageSwitchAnimation = [CABasicAnimation animationWithKeyPath:@"contents"];  
imageSwitchAnimation.fromValue = (id)[UIImage imageNamed:@"red.png"].CGImage; 
imageSwitchAnimation.toValue = (id)[UIImage imageNamed:@"green.png"].CGImage; 
imageSwitchAnimation.duration = 1.5f;   
[self.button.imageView.layer addAnimation:imageSwitchAnimation forKey:@"animateContents"]; 

不过,我想动画永远(好,直到我告诉它停止),也继续为动画反转和循环。换句话说,淡红色 - >绿色 - >红色,然后重复。

我试图把上面的动画块放到一个无限循环(连同一些逻辑来确定衰落是否应该从红色 - >绿色或绿色 - >红色),但这只是锁定整个应用程序。

其它解决方案似乎使用cocos2d的,这似乎是相当沉重的重量,因为这是我需要的应用程序(所以我不希望使用这样的框架,除非绝对必要)的唯一动画。

任何帮助将不胜感激。

回答

23

是的,你可以做到这一点,在CABasicAnimation。诀窍是许多最重要的方法不在CABasicAnimation Class Reference中,甚至在其超类中。 CABasicAnimation实现了一个名为CAMediaTiming的协议。请参阅CAMediaTiming Protocol Reference

您想要了解两个属性:autoreversesrepeatCount。两者都是不言自明的,但如果你想要无限重复呢?来自repeatCount的条目:

可能是小数。如果repeatCount为0,则忽略。默认为0.如果指定了repeatDuration和repeatCount,则行为未定义。

将此属性设置为HUGE_VALF将导致动画永久重复。

你能从那里解决吗?

+0

非常感谢 - 完美的作品!非常清楚的解释:) – Skoota 2012-04-16 05:58:37