我有 viewController1(在 UINavigationController 中)呈现 viewController2 问题是当 viewController2 被呈现时(大约需要 0.2 秒),应用程序中的事件可能会导致 viewController1 被弹出。
然后我得到:
对 DetailsViewController 的开始/结束外观转换的不平衡调用:0x7e6191a0。
而且 viewController2 在屏幕上也被“孤立”了(没有办法删除它)..
这是代码(在 Xamarin c# 中,但在 Objective C 中存在相同的问题):
this.PresentViewController(viewController2, animated: true, completionHandler: null); // takes 0.2s to animate
//
// then 0.1s later, say, this is called:
//
this.DismissViewController(animated: false, completionHandler: null);
this.NavigationController.PopToRootViewController(animated: false);
问题是 this.DismissViewController 实际上并没有在 viewController2 仍在动画时关闭它。
(如果正在进行 Push 动画,也会出现类似的问题)。
一个解决方案是将 PopToRootViewController 的请求“排队”并在 this.PresentViewController 的 completionHandler 中运行它。但这非常麻烦,意味着应用程序中的所有事件都必须排队,所有动画都必须有完成处理程序。
我真的需要一种方法来取消当前动画(this.View.Layer.RemoveAllAnimations() 不适用于 presentViewController),这样 DismissViewController 才能正常工作,并且可以毫无问题地调用 PopToRootViewController。
人们如何处理这个“不可取消的动画”问题?
更新:
还有一个相关的问题,现在我们必须使用 UIAlertController 而不是 UIAlert,请参阅背景:
如果已经显示警报,则显示 UIAlertController
在呈现 UIAlertController 之前,我们必须等待所有 presentViewController 动画完成。这对于我们想要在警报中显示的推送通知之类的东西来说很难,但它可能会在动画期间到达。