基于中断完成块的动画执行单独的动画

时间:2013-03-02 00:04:02

标签: iphone ios objective-c

我使用基于块的动画来模拟交易卡作为游戏的介绍动画。除非用户在动画期间导致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);}];
    }
}

1 个答案:

答案 0 :(得分:0)

你可以添加一个全局BOOL,例如hasUserSkippedOn,一旦用户按下继续将其设置为YES,然后每次你点击完成块检查_hasUserSkipped是否仍然是YES然后不再造成任何后果。通常在块上它有一个默认的结束bool但我不太确定动画块是否有结束bool。