2012-02-11 3 views
1

Я пытаюсь повторно использовать эффект эффекта Кена Бернса, созданный Хавьером Берланой (кстати, к нему относится Kudos).Перезапуск анимации при появлении контроллера вида

У меня есть вид на моем контроллере корневого представления. Когда я нажимаю новый контроллер представления и затем выталкиваю его, анимация в представлении останавливается в конце анимации. Когда переходное время проходит, оно меняет изображение, и анимация снова работает.

Я огляделся, но не нашел рабочего решения для этой проблемы. Мое последнее решение было реализовать pauseLayer и resumeLayer показано здесь (в нижней части):

https://gist.github.com/1802341

Я призываю эти методы на viewWillAppear и viewWillDisappear моего зрения контроллера.

Что делать, чтобы приостановить/возобновить анимацию?

Я разрабатываю для прошивки 5.

ответ

1

От реализации Кена Бернса, я вижу, что анимация обрабатывается через петлю:

- (void)_startAnimations:(NSArray *)images 
{ 
    @autoreleasepool { 

    for (uint i = 0; i < [images count]; i++) { 

     self.currentImage = i; 

     NSOperationQueue *mainQueue  = [NSOperationQueue mainQueue]; 
     NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self 
              selector:@selector(_animate:) 
               object:[NSNumber numberWithInt:self.currentImage]]; 
     [mainQueue addOperations:[NSArray arrayWithObject:operation] waitUntilFinished:YES]; 

     sleep(self.timeTransition); 
     i = (i == [images count]-1) && isLoop ? -1 : i; 
     } 

    } 
} 

Один из способов остановить анимацию добавляют флаг, как это:

for (uint i = 0; i < [images count]; i++) { 

     if (!animationSuspended) { 
      self.currentImage = i; 

      NSOperationQueue *mainQueue  = [NSOperationQueue mainQueue]; 
      NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self 
              selector:@selector(_animate:) 
               object:[NSNumber numberWithInt:self.currentImage]]; 
      [mainQueue addOperations:[NSArray arrayWithObject:operation] waitUntilFinished:YES]; 
      i = (i == [images count]-1) && isLoop ? -1 : i; 
     } 
     sleep(self.timeTransition); 
     } 

Итак, когда вы установите флаг, тело цикла выполняется только для получения задержки (сна), а остальную часть государства остается неизменной.

Надеюсь, это поможет.

+0

Это не сработало, при возврате с другого контроллера просмотра анимация мертва (пока не появится новое изображение). –