我使用基于块的动画来模拟交易卡作为游戏的介绍动画。除非用户在动画期间导致segue触发,否则动画效果很好,我们会在其中执行其他动画,以使效果从源视图控制器到目标视图控制器进行“滑动”转换。现在发生的事情是已经“处理”的卡片被适当地滑出屏幕,如果有卡片没有被处理,它会在转换过程中处理它,然后当目标视图控制器被推动时卡片就会消失。这很难看。
我尝试了'view.layer removeAllAnimations'没有帮助(我确实导入了quartzcore)。我想要做的是取消完成块中的待处理动画,并简单地执行segue动画。
这是“交易”代码:
[UIView animateWithDuration:0.20f
delay:0.20f
options:UIViewAnimationOptionCurveEaseOut
animations:^
{
_fiveOfHearts.center = CGPointMake(90, 198);
_fiveOfHearts.transform = fiveOfHeartsTransform;
}
completion:^(BOOL finished)
{[UIView transitionWithView:_fiveOfHearts duration:0.20f options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
_fiveOfHearts.image = [UIImage imageNamed:@"52"];
}completion:nil];
[UIView animateWithDuration:0.30f
delay:0.0f
options:UIViewAnimationOptionCurveEaseOut
animations:^
{
_jackOfHearts.center = CGPointMake(128, 196);
_jackOfHearts.transform = jackfHeartsTransform;
}
completion:^(BOOL finished)
{[UIView transitionWithView:_jackOfHearts duration:0.40f options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
_jackOfHearts.image = [UIImage imageNamed:@"112"];
}completion:nil];
[UIView animateWithDuration:0.30f
delay:0.0f
options:UIViewAnimationOptionCurveEaseOut
animations:^
{
_aceOfHearts.center = CGPointMake(162, 196);
_aceOfHearts.transform = aceOfHeartsTransform;
}
completion: ... and so on.
segue代码类似于:
for (UIView *iv in src.view.subviews) {
if (iv.tag != 99999) {
[UIView animateWithDuration:0.5f animations:^{iv.center = CGPointMake(iv.center.x - 600, iv.center.y);}];
}
}
答案 0 :(得分:0)
你可以添加一个全局BOOL,例如hasUserSkippedOn,一旦用户按下继续将其设置为YES,然后每次你点击完成块检查_hasUserSkipped是否仍然是YES然后不再造成任何后果。通常在块上它有一个默认的结束bool但我不太确定动画块是否有结束bool。