如何停止已经运行的动画

时间:2011-08-03 06:06:27

标签: iphone core-animation

我正在使用块级技术做一些动画。我想在某些条件的基础上停止动画。如何阻止动画完成?

以下是我的动画代码:

[UIView animateWithDuration:2.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
                     animations:^{ 
                         if([arrAns count]>0)
                             vwb1.center = CGPointMake(260, 40);
                     } 
                     completion:^(BOOL finished){
                         [UIView animateWithDuration:1.5 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
                                          animations:^{ 
                                              if([arrAns count]>1)
                                                  vwb2.center = CGPointMake(260, 100);
                                          } 
                                          completion:^(BOOL finished){
                                              [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
                                                               animations:^{ 
                                                                   if([arrAns count]>2)
                                                                       vwb3.center = CGPointMake(260, 160);
                                                               } 
                                                               completion:^(BOOL finished){
                                                                   [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction
                                                                                    animations:^{ 
                                                                                        if([arrAns count]>3)
                                                                                            vwb4.center = CGPointMake(260, 220);
                                                                                    } 
                                                                                    completion:^(BOOL finished){
                                                                                        [UIView animateWithDuration:1.0 delay:0.0 options:UIViewAnimationOptionAllowUserInteraction animations:^{ 
                                                                                            if([arrAns count]>4)
                                                                                                vwb5.center = CGPointMake(260, 280);
                                                                                        } completion:nil];
                                                                                    }];
                                                               }];

                                          }
                          ];

                     }];

我这里没有任何钥匙所以我不能在钥匙的基础上删除它。还有一个功能,如removeallanimation但我无法使用它。如果有人可以帮助我如何使用它也会没事的。

编辑:好的,我知道怎么做,我正在使用以下代码:

[self.view.layer removeAllAnimations];

但是现在我有问题是我的块级动画还没有开始运行。因此,如果我在第二个块中删除动画,它仍会执行剩余块。我也需要阻止它。

感谢
的Pankaj

1 个答案:

答案 0 :(得分:2)

您应该检查finished变量。只有先前完成(finished == YES)而未停止时才开始下一个动画(在一个块内)。

  

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion

     

...

     

完成
   动画序列时要执行的块对象   结束。此块没有返回值,只需一个布尔值   指示动画是否实际的参数   在调用完成处理程序之前完成。如果持续时间   动画为0,此块在开头执行   下一个循环循环。