1

無限のアニメーションを作成したい(たとえば、2つの位置の間を無限に移動するビューを作成する)

これが再帰であるかどうか、そしてスタックがオーバーフローする原因になるかどうか疑問に思いますか?疑似コード:

-(void)doAnimation {
    [UIView animateWithDuration:1.0
            delay:0.0
            options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction)
            animations:^{
                if(view is at Position A){ 
                    set frame to Postion B;
                }else{
                    set frame to Positon A;
                }
            }
            completion:^(BOOL finished){
                [self doAnimation];
            }
     ];
}

前もって感謝します

レオ

4

2 に答える 2

4

完了が呼び出されると、呼び出しスタックは既にメインの実行ループに巻き戻されているため、スタック オーバーフローは発生せず、無限のアニメーションだけが発生します。

于 2012-09-11T07:49:04.200 に答える
1

これは、繰り返しアニメーションを実行する間違った方法です。代わりにアニメーション オプションUIViewAnimationOptionRepeatを見てください (ドキュメント、最後の定数を参照してください)。アニメーションは次のように書き直すことができます。UIViewAnimationOptionAutoreverse

-(void)doAnimation {
    [UIView animateWithDuration:1.0
            delay:0.0
            options:(UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction |UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse)
            animations:^{
                set frame to Position B;
                }
            }
            completion:nil
            }
     ];
}

ビューが位置 A から始まると仮定します。

于 2012-09-11T08:03:00.693 に答える