我正在使用块在同一个 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");}];
}