web-dev-qa-db-ja.com

UIViewブロックアニメーションは、ビューを左から右、および左に戻します

矢印の形をしたビューをアニメートしたくないので、左から右、左から右などにアニメートしたいと思います。

以下のコードは機能していません。パスが必要だと思いますが、UIViewブロックアニメーションでそれを行う方法がわかりません。

   [UIView animateWithDuration:.5 delay:0 options:UIViewAnimationOptionRepeat animations:^{
    controller.view.frame = frame1;
    controller.view.frame = frame2;

} completion:^(BOOL finished) {

}];
14
the Reverend

UIViewAnimationOptionAutoreverseオプションを使用できます。以下のコードを試してください:

UIView * testView = [[UIView alloc] initWithFrame:CGRectMake(20.0f, 100.0f, 300.0f, 200.0f)];
[testView setBackgroundColor:[UIColor blueColor]];
[self.view addSubview:testView];

[UIView animateWithDuration:0.3f
                      delay:0.0f
                    options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
                 animations:^{
                     [testView setFrame:CGRectMake(0.0f, 100.0f, 300.0f, 200.0f)];
                 }
                 completion:nil];

[testView release];

右から左、左から右への移動を繰り返します...スムーズに。

33
Kjuly

frame1が開始位置であり、frame2が繰り返し前の終了位置であると想定します。

問題は、アニメーションが実行ループの最後に計算されるため、frame1が無視され、ビューが単にframe2に移動されることです。 frame1の設定をブロックの外に移動すると、正常に機能するはずです。アニメーションを再生および転送する場合は、autoreverseUIViewAnimationOptionAutoreverseにする必要があります。

0
Paul.s