UIView动画块不等待

5

我有这段代码:

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

虽然方法methodToRun中有一些内容,但应用程序却不等待0.8秒钟,而是继续运行另一个方法anotherMethod。我能否简单地在运行第二部分之前等待0.8秒钟?


这两个方法具体在做什么,你是如何确定完成块没有等待? - jscs
2个回答

9

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

这里有一个例子,使用了0.8秒的延迟,就像您在问题中使用的一样:

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

值得注意的是,在他之前的问题中,安德鲁被告知要使用 animateWithDuration:animations:completion:。如果您愿意提供更深入的解释,为什么那个答案构成了“误用”动画块,他可能会感激不尽。 - jscs
我一直在等他给出更多的细节,但看起来他已经自己解决了。 - jscs
1
这并不是对动画块的技术误用,我相信sudo只是指出它可能会使预期的控制流程变得模糊。通常,在动画块中同步的内容应该是相当局部化或自说明的。调用任意方法可能会使代码更难管理。 - whitneyland

4

您可以添加一个调用[NSTimer performSelector:withObject:afterDelay]而不是依赖于完成参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接