0

次のようなネストされた UIView アニメーションがいくつかあります。

[UIView animateWithDuration:1.0 animations:^{
    //Animation
}completion:^(BOOL success){
    [UIView animateWithDuration:1.0 animations:^{
        //More animation
    }completion:^(BOOL success){

    }];
}];

スレッドに他のアクティビティがある場合、内側のアニメーションが開始する前に遅延が発生することがあります。

これを回避する方法があるかどうか疑問に思っていました.ここでGCDを使用してバックグラウンドスレッドでこれを実行できますか? これは UI コードなので、おそらくそうではありません。

4

1 に答える 1

1

答えが明らかでない場合、問題を回避する方法は次のとおりです。

[UIView
    animateWithDuration:1.0
    animations:^{
         //Animation
    }];
[UIView
    animateWithDuration:1.0
    delay:1.0
    options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionTransitionNone
    animations:^{
        //More animation
    }
    completion:^(BOOL success) {}];

つまり、最初のアニメーションをスケジュールするのと同時に 2 番目のアニメーションをスケジュールしますが、最初のアニメーションが終了することがわかるまで開始しないように指示します。

スケジュールが設定されると、Core Animation はメイン キューのアクティビティによってブロックされないため、すぐに忙しくても、最初の作業が終了した直後に 2 番目の作業が開始されます。

于 2013-09-13T21:38:47.550 に答える