Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIView动画块未等待_Iphone_Objective C_Uiviewanimation - Fatal编程技术网

Iphone UIView动画块未等待

Iphone UIView动画块未等待,iphone,objective-c,uiviewanimation,Iphone,Objective C,Uiviewanimation,我有以下代码: [UIView animateWithDuration:0.8 animations:^{ [self methodToRun]; } completion:^(BOOL finished){

我有以下代码:

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

虽然methodToRun中有一些东西,但应用程序并没有等待0.8秒,而是继续运行另一种方法。有什么方法可以让我在运行第二位之前等待0.8秒吗?

您可以添加对
[NSTimer performSelector:withObject:afterDelay]
的调用,而不依赖于完成参数

不要误用那样的动画块。如果您确实想要延迟,请使用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];
});

值得注意的是,Andrew被告知使用
animateWithDuration:animations:completion:
来说明他正在处理的问题。如果你愿意的话,他可能会更深入地解释为什么这个答案会构成“误用”一个动画块。我一直在等他提供更多细节,但看起来他已经找到了答案。这不是对动画块的技术误用,我相信sudo只是指is会混淆预期控制流的事实。通常情况下,动画块中同步的内容会非常本地化或自解释。调用任意方法可能会使代码管理更加困难。在这两种方法中具体执行的是什么,您如何确定完成块没有等待?