2013-04-25 4 views
0

Я пытаюсь остановить анимацию на моем UIActivityIndicatorView тем же методом, что и я, нажимаю контроллер вида, используя переход из режима CATransition.UIActivityIndicatorView продолжает анимацию предшествующего CATransition pushViewController

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

Любые идеи о том, как я могу заставить вращение остановиться, а затем выталкивать/исчезать тем же методом?

- (void)pushView:(NSNotification *)notification { 

    [self.activityIndicator stopAnimating]; 
    NextViewController* nextViewController = [[NextViewController alloc] init]; 
    CATransition *transition = [CATransition animation]; 
    transition.duration = 1.5f; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionFade; 
    [self.navigationController.view.layer addAnimation:transition forKey:nil]; 
    [self.navigationController pushViewController:nextViewController animated:NO]; 

} 

Edit 1

В том же ключе, как ответ Давида, я был в состоянии успешно stopAnimating, если я использовал dispatch_after и задерживается на доли секунды. Есть ли лучший способ сделать это ?:

- (void)pushView:(NSNotification *)notification { 

    [self.activityIndicator stopAnimating]; 

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.0001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){ 
     NextViewController* nextViewController = [[NextViewController alloc] init]; 
     CATransition *transition = [CATransition animation]; 
     transition.duration = 1.5f; 
     transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
     transition.type = kCATransitionFade; 
     [self.navigationController.view.layer addAnimation:transition forKey:nil]; 
     [self.navigationController pushViewController:nextViewController animated:NO]; 
    }); 
} 

ответ

0

Я столкнулся с чем-то похожим на это раньше. То, что вы используете, называется Синхронное выполнение. При синхронном выполнении пользовательский интерфейс не обновляется до тех пор, пока компилятор не завершит эту функцию, a.k.a. }. Как вам обойти это? Просто. Просто запустите любые методы для обновления пользовательского интерфейса в асинхронной отправки:

- (void)pushView:(NSNotification *)notification { 

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ 

dispatch_async(dispatch_get_main_queue(), ^(void){ 
    [self.activityIndicator stopAnimating]; 
}); 

NextViewController* nextViewController = [[NextViewController alloc] init]; 
CATransition *transition = [CATransition animation]; 
transition.duration = 1.5f; 
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
transition.type = kCATransitionFade; 
[self.navigationController.view.layer addAnimation:transition forKey:nil]; 
[self.navigationController pushViewController:nextViewController animated:NO]; 

}); 

} 

Упс! Я забыл поставить другой код в простой отправке! Попробуйте отредактированный код, и он должен работать!

Таким образом, [self.activityIndicator stopAnimating]; запускается в приоритетном потоке, в то время как остальная часть кода в функции запускается в потоке приоритета по умолчанию, эффективно запуская код в то же время, как и следовало ожидать.

Cheers!

+0

Спасибо за ответ, Дэвид. К сожалению, 'dispatch_async' не работал для меня. Однако, если я задерживаю выполнение переходного блока с помощью 'dispatch_after', всего за долю секунды,' stopAnimating' ведет себя так, как ожидалось. Я редактировал свой вопрос, чтобы показать, как я изменил свой код. Должен быть лучший способ ... – Snow

+0

Проверьте отредактированный код. Я забыл отправить все это в очередь по умолчанию. – David

+0

Итак, ActivityIndicator останавливает анимацию сейчас, но представление не толкает ...:/Любые идеи? Я ценю помощь в любом случае – Snow

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

  • Нет связанных вопросов^_^