UIView をアニメーション化するための 2 つの主要な文書化された方法があります。1 つはメソッドで始まる複数の呼び出しを行う非推奨のプロセスであり、もう 1 つbeginAnimations:context:
はブロックベースの新しい提案されたアプローチです。
アプリケーションに次のコードがあります。ただし、古い非推奨のアニメーション セグメントのみが機能します。新しいブロックベースのアプローチは、最初は機能しますが、その後は毎回アニメーションの最後まで直接スキップし、すぐに最後のフレームだけを表示します。誰もこれを経験したことがありますか?
-(void)updateImageViewSlider:(UIImage *)image {
mImageFeedSwipe.alpha = 0.0;
[mImageFeedSwipe setHidden:NO];
mImageFeedSwipe.frame = DEFAULT_IMAGEVIEW_RECT;
[mImageFeedSwipe setImage:image];
//
// The following animation code works fine.
//
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
mImageFeedSwipe.alpha = 1.0;
[mImageFeedSwipe setFrame:NEW_IMAGEVIEW_RECT];
[UIView commitAnimations];
//
// The following DOES NOT work except on the first run
//
int animationOptions = 0
| UIViewAnimationOptionCurveEaseInOut
| UIViewAnimationOptionBeginFromCurrentState
| UIViewAnimationOptionAllowUserInteraction;
[UIView animateWithDuration:1.0
delay:0
options:animationOptions
animations:^{
// Bring in the swiping image view...
mImageFeedSwipe.alpha = 1.0;
[mImageFeedSwipe setFrame:NEW_IMAGEVIEW_RECT];
}
completion:nil];
}
これは を介してメインスレッドで実行されています[self performSelectorOnMainThread...]
。