0

私のアプリでは、多数のアニメーション、移動するオブジェクトや形状などを実行します。アニメーションの多くは、他のオブジェクトのアニメーションにつながります。アプリケーションの問題は、アニメーションの実行中に、現在アニメーション化されているオブジェクトの 1 つを含む別のアニメーションを開始すると、画面が白くなったり、予期しない結果が得られることです。

私たちがやろうとしていることを示すために、いくつかのサンプルコードを作成しました。

UIButton *button;
BOOL currentlyShowingQuestion;
- (void)viewDidLoad
{
    [self moveButton:button];
    currentlyShowingQuestion = NO;
    [NSTimer scheduledTimerWithTimeInterval:.1 target:self selector:@selector(hasBoolChanged) userInfo:nil repeats:YES];
}
- (void)moveButton:(UIButton *)buttonToUse {
    currentlyShowingQuestion = YES;
    NSLog(@"moveButton Called!  Yippee!!!!!!!");
    [UIView animateWithDuration:0.5 delay:0.5 options:nil animations:^{
        buttonToUse.frame = CGRectMake(10, 10, 300, 440);
    } completion:^(BOOL finished){
        currentlyShowingQuestion = NO;
    }];
}

-(void)hasBoolChanged {
    if (currentlyShowingQuestion == YES) {
        NSLog(@"Yes");
    }
    else if (currentlyShowingQuestion == NO) {
        NSLog(@"No");
    }
}

私が実際に目にするのは、メソッドが実行されると、currentShowingQuestion BOOL の両方が即座に変更されるため、YES に変更され、即座に NO に戻るようなものです。その後、アニメーションが実行されます。どうしてこれなの?注文の何が問題になっていますか?

どんな助けでも感謝します。コードのフォーマットについて申し訳ありません - ここで構文を理解できませんでした。

前もって感謝します、

サム

4

2 に答える 2

0

私は UIView にはあまり詳しくありませんが、ドキュメントによると、アニメーションが終了する前に完了ブロックが呼び出される場合があります。currentlyShowingQuestion を NO に変更する前に、finished が YES かどうかの条件を追加してみてください。

于 2012-07-09T10:13:33.813 に答える
0

あなたが何を達成しようとしているのか、私にはよくわかりません。最初に、ブール値が変更されたかどうかをチェックするタイマーを開始します。このタスクにはやり過ぎだと思いますが、それは問題ありません。なんらかの理由でアニメーションが 0.5 秒遅れており、アニメーションの継続時間が 0.5 秒であり、これは非常に高速であるため、値を即座に変更したように見える場合があります。

于 2012-07-09T12:15:53.127 に答える