как остановить уже запущенную анимацию - PullRequest
4 голосов
/ 03 августа 2011

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

Ниже приведен мой код для анимации:

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{ 
                         if([arrAns count]>0)
                             vwb1.center = CGPointMake(260, 40);
                     } 
                     completion:^(BOOL finished){
                         [UIView animateWithDuration:1.5 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
                                          animations:^{ 
                                              if([arrAns count]>1)
                                                  vwb2.center = CGPointMake(260, 100);
                                          } 
                                          completion:^(BOOL finished){
                                              [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
                                                               animations:^{ 
                                                                   if([arrAns count]>2)
                                                                       vwb3.center = CGPointMake(260, 160);
                                                               } 
                                                               completion:^(BOOL finished){
                                                                   [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
                                                                                    animations:^{ 
                                                                                        if([arrAns count]>3)
                                                                                            vwb4.center = CGPointMake(260, 220);
                                                                                    } 
                                                                                    completion:^(BOOL finished){
                                                                                        [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
                                                                                            if([arrAns count]>4)
                                                                                                vwb5.center = CGPointMake(260, 280);
                                                                                        } completion:nil];
                                                                                    }];
                                                               }];

                                          }
                          ];

                     }];

У меня нет ключа, поэтому я не могу удалить его на основе ключа,Существует также функция удаления алланизации, но я не могу ее использовать.Если кто-то может мне помочь, как это использовать, то это тоже будет хорошо.

Редактировать: Хорошо, я понял, как это сделать, я делаю это, используя следующий код:

[self.view.layer removeAllAnimations];

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

Спасибо
Pankaj

1 Ответ

2 голосов
/ 17 июля 2012

Вы должны проверить finished переменную.И начинать следующую анимацию (внутри блока), только если предыдущая была закончена (finished == YES), а не остановлена.

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

...

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

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