2

我有 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 动画完成。这对于我们想要在警报中显示的推送通知之类的东西来说很难,但它可能会在动画期间到达。

4

0 回答 0