Как зациклить анимацию с некоторыми изменениями на каждой итерации? - PullRequest
0 голосов
/ 15 мая 2011

Я хочу, чтобы моя анимация зацикливалась и постепенно замедлялась.Я не думаю, что в этом случае можно использовать свойство «повторы», потому что анимация должна замедляться в конце каждой итерации.Мой план был прост:

1) Создание и инициализация анимации (вне тела цикла for).

2) Создание цикла for.В теле этого цикла установите свойство duration для моей анимации.И запустите анимацию, добавив ее в мое представление (это явная анимация).

3) Дождитесь времени и продолжите выполнение цикла.

Я использовал функцию usleep (), чтобы дождаться, покаанимация заканчивается.На следующей итерации цикла добавляется та же анимация и изменяется ее свойство длительности (увеличивается для замедления анимации).Вот код (весь код для инициализации анимации приведен выше, и он прекрасно работает без следующих модификаций):

for (int i=1; i<10; i++) {
        // Find the duration (I simplified this part it depends on i value).
        keyframeAnim.duration = ...;
        // Add an animation.
        [self addAnimation:keyframeAnim forKey:@"loopingLongAnimation"];
        // Wait till it stops.
        usleep(keyframeAnim.duration);
    }

Проблема в том, что это не работает должным образом.Он воспроизводит анимацию только один раз и останавливается.Похоже, я пропустил что-то очень важное для основной анимации.Есть ли более подходящие или подходящие решения для этой цели?Могу ли я использовать временную кривую, чтобы повлиять на всю циклическую анимацию, а не только на примерную часть?

Заранее спасибо.

1 Ответ

0 голосов
/ 16 мая 2011

Ничего не рендерится, потому что рендеринг требует прокачки цикла выполнения.См. Мой ответ на Отображение изображений в последовательности с циклом

Я думаю, что в этом случае вы могли бы установить задержку для каждой анимации, эквивалентную задержке + продолжительности предыдущей анимации, поэтому анимациивыровнены друг к другу на временной шкале.

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

И то и другое заставляет цикл анимации работать асинхронно, чтобы цикл выполнения мог выполняться нормально.

...