Циклическая анимация Core Animation?

Чтобы сформулировать мой вопрос как можно проще, есть ли способ создать базовую последовательность анимации, которая будет повторяться снова и снова до остановки?

В частности, я создаю собственный класс, в котором я хочу иметь методы -start и -stop, которые будут вызывать его пульсацию. Написание кода анимации пульса не проблема, а как сделать его повторяющимся?

Заранее благодарим за любые ответы!


person cemulate    schedule 24.04.2009    source источник


Ответы (1)


Согласно документации, вы делаете это, создавая анимацию с очень большим repeatCount (код взят из документации, на которую я ссылался):

// create the animation that will handle the pulsing.
CABasicAnimation* pulseAnimation = [CABasicAnimation animation];

// over a one second duration, and run an infinite
// number of times
pulseAnimation.duration = 1.0;
pulseAnimation.repeatCount = HUGE_VALF;

// we want it to fade on, and fade off, so it needs to
// automatically autoreverse.. this causes the intensity
// input to go from 0 to 1 to 0
pulseAnimation.autoreverses = YES;

изменить: оператор спросил, как остановить анимацию. Из следующий абзац документации:

Вы запускаете явную анимацию, отправляя addAnimation:forKey: сообщение целевому слою, передавая анимацию и идентификатор в качестве параметров. После добавления к целевому слою явная анимация будет выполняться до завершения анимации или до тех пор, пока она не будет удалена со слоя. Идентификатор, используемый для добавления анимации к слою, также используется для ее остановки путем вызова removeAnimationForKey:. Вы можете остановить всю анимацию для слоя, отправив слою сообщение removeAllAnimations.

person Brian Campbell    schedule 24.04.2009
comment
Вопреки комментарию в вставленном вами примере кода, 1e100 не бесконечен - это всего лишь 10 ** 100. Константа INFINITY, определенная в math.h, была бы лучше. - person Peter Hosey; 24.04.2009
comment
Отвечено в ответе, так как в комментариях недостаточно места. - person Brian Campbell; 24.04.2009
comment
@PeterHosey концептуально то же самое. БЕСКОНЕЧНОСТЬ определяется как HUGE_VALF. Однако 1e100 больше максимального значения, допустимого для числа с плавающей запятой. Я предпочитаю использовать MAXFLOAT. - person KPM; 24.01.2012
comment
Эти анимации становятся черными при создании фона, а затем возвращаются из фона. Как это исправить? - person jjxtra; 04.05.2012
comment
@PsychoDad Я бы порекомендовал вам задать новый вопрос более подробно. Просто спросить в комментарии означает, что я единственный, кто это увижу, вы не можете подробно описать свой вопрос, и не так много места, чтобы ответить вам в комментарии. - person Brian Campbell; 06.05.2012
comment
Строго говоря, вы должны использовать косвенную символьную константу HUGE_VALF вместо простого значения или других символов. Нельзя сказать, что они такие же. Только их результат для конкретной реализации одинаков. Строго говоря, INFINITY или 1e100f неверны. - person eonil; 21.09.2012