2012-04-24 4 views
0

私は、押されたボタンに応じてメイン画面に移行する複数のビューを持つアプリケーションを持っています。私の現在の問題は、ビューがアニメーションの途中にある場合、ユーザーが別のボタンを選択するとレイアウト全体が乱れることです。 (例:ビューが画面に表示されず、ピクセル数がオフになることを意味します)既存のiOSアニメーションを完成させる

ビューが現在アニメーション化されているかどうかを確認する方法がある場合は、最後のフレームにアニメートし、間にあるものをスキップします。場合

-(IBAction)buttonPress:(id)sender 
{ 
    if([selectedView.layer.animationKeys count] > 0) 
    { 
     [selectedView.layer removeAllAnimations]; 
    } 

// Perform other calculations once the animation has stopped 
} 

答えて

0

これを行うには、多くの方法がありますが、....

:以下は、私はちょうど私が他のユーザーに読んだものに基づいてテストしたコードの小片がSOに質問ですアニメーションの開始時に "isAnimating"フラグを設定し、完了ブロックで再び設定するブロックアニメーションを使用しています。どこからでもboolを確認し、必要に応じてケースを処理できます。アニメーションが発生した後に実行するコードを必要として

が、

// animation code in some method... 
[UIView animateWithDuration:1.0 
    delay: 0.0 
    options: UIViewAnimationOptionCurveEaseIn 
    animations:^{ 
     isAnimating = YES; 
     fooView.alpha = 0.0; 
    } 
    completion:^(BOOL finished){ 
     isAnimating = NO; 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"FooBeDone" object:nil userInfo:nil] 
    }]; 

-(IBAction)buttonPress:(id)sender { 
    if (isAnimating) { 
     [[NSNotificationCenter defaultCenter] addObserver:self 
          selector:@selector(doBar:) 
           name:@"FooBeDone" 
          object:nil]; 
     // possibly disable button to prevent multiple taps? 
    } else { 
     [self doBar]; 
    } 
} 

- (void)doBar { 
    // do what needs to be done when when the animation is over 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"FooBeDone" object:nil]; 
    // possibly enable button again 
} 

編集:私は、可能な通知方法を示すために多くのコードを追加しました。 IBActionで拡張ループを作成すると、ループが終了するまでユーザーインターフェイスがロックされ、メイン実行ループに戻ることができるため、回避することを強くお勧めします。通知でも同じ効果が得られるはずですが、メインの実行ループが妨げられないようにすることができます。

+0

これに似たアプローチを試みましたが、アプリケーションを停止しました。私はフラグを設定し、私がまだアニメーション化していて、ユーザーが画面を変更したければ、アニメーションが終了するまで、私は不定期のwhileループに入ります。しかし、whileループを使用すると、アニメーションもすべて停止しました – Seb

+0

私の応答を編集して、どのように「待ち」して問題が発生しないかを示す通知を編集しました。 – DBD

+0

このアプローチをとることにしたら、ボタンを無効/有効にする必要がありますか?私はそれがそれに近づくための唯一の正しい方法だと思うが、私は選択肢がない。ありがとう – Seb

関連する問題