Повторите анимацию разное количество раз - PullRequest
12 голосов
/ 28 апреля 2011

Мне было интересно, как я могу установить анимацию, чтобы повторить. Количество повторений должно определяться переменной. В следующем коде переменная int newPage должна определять частоту повторения анимации.

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

for (int temp = 1; temp <= newPage; temp++) {
            [self animatePage];
}

Если я кодирую следующее, оно работает так, как я хочу, но это жестко закодировано (т. Е. Анимация будет повторяться дважды), и я не вижу способа, как изменить количество, как часто эта анимация выполняется в коде и в соответствии с моей переменной newPage:

[UIView animateWithDuration:0
                      delay:0.1
            options:UIViewAnimationOptionCurveEaseIn
             animations:^{[self animatePage];}
             completion:^(BOOL finished){[self animatePage];}];

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


EDIT:

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

        [UIView animateWithDuration:0
                          delay:1
                        options:UIViewAnimationOptionCurveEaseIn
                     animations:^{

                         [UIView setAnimationRepeatCount:2];
                         [self animatePage];

                     }
                     completion:nil];

Ответы [ 3 ]

31 голосов
/ 17 марта 2013

Была такая же проблема - вы пропустили 'UIViewAnimationOptionRepeat'

Это должно работать:

 [UIView animateWithDuration:0
                      delay:1
                    options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionRepeat
                 animations:^{
                     [UIView setAnimationRepeatCount:2]; // **This should appear in the beginning of the block**
                     [self animatePage];

                 }
                 completion:nil];

сделал трюк для меня.

8 голосов
/ 28 апреля 2011

Вы пытались установить repeatCount? + (void)setAnimationRepeatCount:(float)repeatCount

Я пробовал следующий блок кода, и он определенно повторяется для меня 2 раза (я был UITextView, который был увеличен в 2 раза в X dir и 3X в Y dir):

[UIView animateWithDuration:2 
delay:0.1 
options:UIViewAnimationOptionCurveEaseIn 
animations:^{ [UIView setAnimationRepeatCount:2]; 
l.transform = CGAffineTransformMakeScale(2,3); } completion:nil];
2 голосов
/ 28 апреля 2011

причина, по которой вы не видите, но одна анимация состоит в том, что вы вызываете анимацию из цикла в том же цикле выполнения, возобновляя выигрыш последнего вызова (одна анимация)

вместо звонка [self animatePage], попробуйте позвонить

[self performSelector:@selector(animatePage) withObject:nil afterDelay:.1 *temp];

это создаст ваши звонки в отдельных темах.

вам может понадобиться играть с интервалом задержки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...