2012-02-11 1 views
1

Javier Berlanaが作成したKen Burnsエフェクトビューを再利用しようとしています。ビューコントローラをポップするときのアニメーションの再起動

私は自分のルートビューコントローラでビューを持っています。新しいView Controllerをプッシュしてポップアウトすると、ビューのアニメーションはアニメーションの最後で停止します。移行時間が経過すると、画像が変更され、アニメーションが再び機能します。

私は見回しましたが、この問題の解決策は見つかりませんでした。私の最後の解決策は、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

アニメーションが死んでいる(別の画像が表示されるまで)別のビューコントローラーから戻ってきたときに機能しませんでした。 –

関連する問題