3

UILabelをアニメーション化(フェードイン/フェードアウト)しようとしていますが、次のコードを使用しています。

float newAlpha = 0.0;

//TODO:Check if the previous animation has finished

if(answer.alpha==0.0) {
    newAlpha = 1.0;
} else if(answer.alpha==1.0) {
    newAlpha = 0.0;
}
[UIView animateWithDuration:1.0 animations:^{
    answer.alpha = newAlpha;
}];

TODOコメントがある場合は、前のアニメーションが終了したかどうかを確認し、終了していない場合はメソッドを終了します。これを行う方法はありますか?

4

3 に答える 3

3

更新#1:

クラスに変数が必要です。

BOOL _animationFinished;

次に、アニメーションに次の方法を使用できます。

float newAlpha = 0.0;

//TODO:Check if the previous animation has finished
if (_animationFinished == false) return;

if(answer.alpha==0.0) {
    newAlpha = 1.0;
} else if(answer.alpha==1.0) {
    newAlpha = 0.0;
}

[UIView animateWithDuration:1.0f animations:^{ answer.alpha = newAlpha; _animationFinished = false; } completion:^(BOOL finished){ _animationFinished = true; }];

それは仕事でなければなりません。


オリジナル

この場合、私は常にアニメーションの主題を次のようにチェックしています。

float newAlpha = 0.0;

//TODO:Check if the previous animation has finished
if (answer.alpha > 0.f || answer.alpha < 1.f) return; // it is always good enough for me
// ...or with AND it will cause the same effect:
// if (answer.alpha > 0.f && answer.alpha < 1.f) return;

if(answer.alpha==0.0) {
    newAlpha = 1.0;
} else if(answer.alpha==1.0) {
    newAlpha = 0.0;
}
[UIView animateWithDuration:1.0 animations:^{
    answer.alpha = newAlpha;
}];
于 2012-07-25T10:24:45.080 に答える
2

UIViewを使用している場合は、

[UIView setAnimationDidStopSelector:@selector(animationfinished)];
-(void) animationfinished
{
      animationFinished = YES;
}
于 2012-07-25T10:06:16.283 に答える
1

animateWithDuration :animations:completion:メソッドを使用して「前のアニメーション」を実行し、完了ハンドラーにフラグを設定して、終了したかどうかを示します。次に、TODOコメントがある場所とまったく同じフラグを確認します。

編集:以下の例

-(void) animation1 {
    // assume that alpha was 0 and we want the view to appear
    [UIView animateWithDuration:1.0 animations:^{
        answer.alpha = 1.0;
    } completion:^(BOOL finished){
        fristAnimationFinished = finished;
    }];
}

-(void) animation2 {
    float newAlpha = 0.0;

    if (!firstAnimationFinished)
        return;

    if(answer.alpha==0.0) {
        newAlpha = 1.0;
    } else if(answer.alpha==1.0) {
        newAlpha = 0.0;
    }
    [UIView animateWithDuration:1.0 animations:^{
        answer.alpha = newAlpha;
    }];
}
于 2012-07-25T10:06:22.977 に答える