0

我正在使用基于块的动画来模拟发牌作为游戏的介绍动画。除非用户在动画期间触发 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);}];
    }
}
4

1 回答 1

0

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

于 2013-03-02T00:59:50.387 回答