有两种主要的记录 UIView 动画的方法。一种是不推荐使用的过程,其中一个以方法开头进行多次调用,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...]
。