在我的 iPhone 应用程序中,我有一堆代码在一个方法中运行。在方法的最后,我有几行需要延迟,所以它们只在之前的内容之后运行,这是因为正在制作动画,我需要在动画完成时运行这段代码。
我知道我可以只使用 NSTimer,但我想尝试一些更优雅或更简洁的东西。
在我的 iPhone 应用程序中,我有一堆代码在一个方法中运行。在方法的最后,我有几行需要延迟,所以它们只在之前的内容之后运行,这是因为正在制作动画,我需要在动画完成时运行这段代码。
我知道我可以只使用 NSTimer,但我想尝试一些更优雅或更简洁的东西。
您可以用于第一个过程:
– performSelector:onThread:withObject:waitUntilDone:
这将阻塞你的线程,直到进程完成。
在此之后,您的下一条语句将开始执行。
执行此操作的标准(并且非常方便)iOS 方式是回调块。考虑一个简单的 UI 动画:
[UIView animateWithDuration:1
animations:^{
myView.alpha = 1; // fade-in myView
}
completion:^(BOOL finished){
// this code gets called when the animations block above is finished
}];
您可以实现自己的方法,将完成块作为参数,并在执行结束时调用它。这是Apple的块教程,应该可以帮助您入门。
如果即使在动画结束后您还需要延迟,您可以调用您的第二个过程:
[self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>]