Существует два основных документированных метода анимации UIViews.Во-первых, это устаревший процесс, в котором один совершает несколько вызовов, начиная с метода 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...]
.