2012-02-11 87 views
1

我想重用Javier Berlana創建的Ken Burns效果視圖(順便提一下,對他而言)。當彈出一個視圖控制器時重新啓動動畫

我有我的根視圖控制器的視圖。當我推動一個新的視圖控制器,然後將其彈出時,視圖上的動畫在動畫結束時停止。當過渡時間過去時,它會改變圖像並且動畫再次起作用。

我環顧四周,但未發現此問題的解決方案。我最後的解決方案是實現pauseLayer和這裏顯示resumeLayer(底部):

https://gist.github.com/1802341

我調用上viewWillAppear和我的視圖控制器的viewWillDisappear這些方法。

我應該怎麼做才能暫停/恢復動畫?

我正在開發的iOS 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

它不起作用,從另一個視圖控制器返回時動畫已死(直到出現新圖像)。 – 2012-02-11 19:54:27

相關問題