2012-04-15 3 views
5

В моем приложении iOS 5 у меня есть обычай UIButton, у которого в качестве изображения есть красный шар. Когда кнопка нажата, я хотел бы, чтобы шар начал пульсировать/исчезать между красным и зеленым. У меня есть и красные и зеленые изображения и может успешно кросс-disolve между ними, используя следующий код:Looped, обратимая анимация с использованием Core Animation

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.

Вы хотите знать о следующих двух свойствах: autoreverses и repeatCount. Оба они самоочевидны, но что, если вы хотите бесконечных повторов? От записи для repeatCount:

Может быть дробным. Если значение repeatCount равно 0, оно игнорируется. По умолчанию 0. Если указаны как repeatDuration, так и repeatCount, поведение не определено.

Установка этого свойства в HUGE_VALF приведет к тому, что анимация будет повторяться навсегда.

Можете ли вы отработать оттуда?

+0

Большое спасибо - это работает отлично! Очень четко объяснено :) – Skoota

Смежные вопросы