Я анимирую пользовательский UIView с использованием блоков анимации:
- (void)animateProgress
{
[UIView animateWithDuration:animationDuration
delay:0.0
options: UIViewAnimationCurveLinear | UIViewAnimationOptionBeginFromCurrentState
animations:^(void) {
midImageView.frame = CGRectMake(midImageView.frame.origin.x, midImageView.frame.origin.y, (elapsedTime / endTime) * (bodyImageView.frame.size.width / 10 - MID_IMAGE_OFFSET_X), midImageView.frame.size.height);
}
}
-animateProgress()
вызывается повторно из объекта NSTimer.
Проблема в плавных переходах от анимации в полете. Я установил флаг UIViewAnimationOptionBeginFromCurrentState
, но текущая анимация плавно не переходит к следующей - текущей анимации разрешается завершиться, а затем начинается следующая - вместо того, чтобы плавно объединить их вместе.
Меня озадачивает то, что нет проблем, когда я не использую блоки в стиле Obj-C:
- (void)animateProgress
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:5.0];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
midImageView.frame = CGRectMake(midImageView.frame.origin.x, midImageView.frame.origin.y, (elapsedTime / endTime) * (bodyImageView.frame.size.width / 10 - MID_IMAGE_OFFSET_X), midImageView.frame.size.height);
[UIView commitAnimations];
}
Это отлично работает.
Почему не работает, когда я использую блоки?