2011-06-13 76 views
5

我有这样的代码:的UIView动画块而不是等待

[UIView animateWithDuration:0.8 
          animations:^{ 
           [self methodToRun]; 
          } 
          completion:^(BOOL finished){ 
           [self anotherMethod]; 
          }]; 

虽然methodToRun有东西,应用程序只是不会等待0.8秒,并继续运行anotherMethod。有什么方法可以简单地等待0.8秒,然后再运行第二个位?

+0

? – 2011-06-13 17:47:01

+0

@quixoto:不是我! =) – 2011-06-13 18:14:08

+0

在这两种方法中究竟做了什么,以及你如何确定完成块没有在等待? – 2011-06-13 19:20:36

回答

4

您可以添加对[NSTimer performSelector:withObject:afterDelay]的呼叫,而不是依赖完成参数。

9

不要滥用这样的动画块。如果您真的想要延迟,请使用Ken链接的方法,或者更简单的方法是使用GCD(iOS 4+)。

这是一个使用的0.8延迟就像你在你的问题中的例子:为什么downvote

dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 0.8); 
dispatch_after(delay, dispatch_get_main_queue(), ^(void){ 
    [self anotherMethod]; 
}); 
+0

+1使用GCD – 2011-06-13 17:48:38

+0

值得注意的是,安德鲁被告知要在[他早期的问题]中使用'animateWithDuration:animations:completion:'(http://stackoverflow.com/questions/6330050/how-doi-i-等待直到动画在一个不同的类,完成之前,连续)关于他正在处理的问题。如果你倾向于提供一个动画块,他可能会更加深入地解释为什么这个答案会构成“滥用”动画块。 – 2011-06-13 17:52:22

+0

我一直在等待他提供更多细节,但看起来他总是想出来。 – 2011-06-13 22:34:55