Я делаю две анимации в одном и том же UIImageView, используя блоки. Анимации не совсем спина к спине, но почти; между ними есть какая-то логика.
- анимировать UIImageView из одного места представления в другое.
- выполнить логику, которая определяет, разрешено ли изображению оставаться там
- если это не разрешено, отменить анимацию (UIImageView возвращается в исходное положение)
Если я реализую это, как указано выше, отображается только вторая анимация (это нормальное поведение, насколько я понимаю). Если я вложу логику и второй блок анимации в блок завершения первого, я увижу обе анимации, но в этот блок завершения нужно втиснуть изрядное количество кода, и это кажется уродливым и неуместным.
В не вложенной конфигурации, почему iOS хочет сократить предыдущие анимации и выполнить только последнюю, и как я могу заставить ее ждать первую анимацию, прежде чем переходить к следующей? Я не думаю, что ему нужно блокировать основной поток или «сидеть и вращаться» в блоке завершения; Я просто хочу, чтобы все анимации были показаны. Пытался добавить задержку ко второй анимации безрезультатно.
Это работа для CAKeyframeAnimation?
// first animation
[UIView animateWithDuration:0.5
delay:0.0
options: UIViewAnimationCurveLinear
animations:^{movingColor.center = newCenter;
movingColor.transform = scaleTransform;}
completion:^(BOOL finished){ NSLog(@"forward animation done");}];
if (/* ...color is allowed at that location */) {
// do some stuff
} else {
// undo the animation
[UIView animateWithDuration:0.5
delay:0.0
options: UIViewAnimationCurveLinear
animations:^{movingColor.center = origCenter;
movingColor.transform = scaleTransform;}
completion:^(BOOL finished){ NSLog(@"back animation done");}];
}