我有一个 UINavigationController,我在其上推送一个“加载屏幕”UIViewController,同时异步连接到服务器。带有滑动效果的推动是隐含的动画。如果连接时发生错误,我会弹出加载屏幕控制器(再次动画)并向用户显示警报。
如果我在动画完成后弹出视图控制器,一切都很好,但是如果动画尚未完成,就会发生奇怪的事情。通常加载屏幕视图会保留在屏幕上,即使它已从导航控制器堆栈中弹出。我很确定问题与正在进行的动画有关。例如,这个人为的代码片段总是让我在屏幕上看到 secondController 的视图:
[navController pushViewController: secondController animated: YES];
[navController popToRootViewControllerAnimated: YES];
NSAssert([delegate.navigationController.viewControllers count] == 1, @"oops");
我当前的解决方法是向导航控制器注册一个委托并实现 navigationController:didShowViewController:animated: 方法。只有当我知道第一个推送动画完成时,我才会弹出加载屏幕控制器。但是我宁愿早点结束动画。
对于导航控制器视图的所有子视图,我尝试在图层树中的所有图层上调用 removeAllAnimations。虽然这种方法提前结束了动画,但它仍然经常在弹出后仍然显示加载屏幕视图。所以基本上有一个正确的方法来提前结束动画,还是我应该坚持我的工作?