如何检测UINavigationController动画何时完成?

eod*_*ash 10 iphone objective-c uikit ios

我希望这是一个简单的问题.如果我有一个UINavigationController并且我将一个新的视图控制器推入到具有动画过渡的堆栈中,我如何检测动画何时完成并且新的视图控制器在屏幕上?

我有几个场景,我需要推送一个新的控制器,然后必须进行长时间运行.我想首先推送新视图,所以在我开始长时间阻止主线程之前屏幕上有一些东西.如果我在我的长期运行任务之后立即执行推送,则视图将不会显示,直到两者完成后,主线程才能再次处理事件.

因此,一旦动画完成并且视图在屏幕上,我想要做的就是能够在新控制器中检测到,然后启动任务.

Don*_*mer 21

+ @ DH​​amrick建议不要阻止主线程.

要回答原始问题,您可以在两个位置检测viewController更改:

  1. 您刚刚推送的viewController将接收viewWillAppear:viewDidAppear: messages.如果您想知道特定viewController何时出现,请实现这些方法.

  2. navigationController:didShowViewController:animated:@Mike Z提到的方法被发送到navigationController的委托.您需要将对象指定为该委托才能接收此消息.然后,每次 viewController出现时您都会知道.