2017-11-11 210 views
2

当您在iPad上使用4指任务切换手势切换时,我的应用程序在返回时崩溃。在ios中切换任务时发生虚假旋转事件11

当用户执行了4指手势,从我的应用程序中切换出来,我在我的应用程序委托看到applicationWillResignActive:然后applicationDidEnterBackground:,然后(假设我们目前正处在纵向)我顶层视图控制器获取viewWillTransitionToSize:withTransitionCoordinator:与表示横向布局的大小(即使设备未旋转)。这当然会导致很多调整和重新安排新方向的观点。紧接着,我得到viewWillTransitionToSize:withTransitionCoordinator:,其大小指示肖像(设备的原始方向)。再次,我再次为新的(实际上是原创的)方向进行我的布局。

我在找的是如果我等待所有这些完成,我可以全天进入和退出我的应用程序。另一方面,如果在这个不必要的工作正在进行时切换回我的应用程序,我会在某些iOS转换代码中发生崩溃。

在这一点上,我试图理解为什么我会得到这些流浪的旋转事件。如果我能避免这些事情发生,我可以避免陷入任何导致事故发生的情况。他们似乎并不必要。

+1

感谢您指出这一点。起初我以为我无法复制它,然后我意识到,我不仅可以重现它,而且事实上我的应用程序在App Store上充满了崩溃报告! – matt

+0

我发现了另一种情况发生这种情况,当用户在应用处于多任务状态时单击主页按钮时。当应用程序处于后台状态时,再次连续两次“viewWillTransitionToSize”。 – matt

+0

我在想它这样做的原因是它可以在横向和纵向上快照应用程序,以便它可以在其正在运行的应用程序列表中显示缩略图。使用适当的代码绕过后台发生的方向更改,将横向退出应用程序,旋转至纵向,然后双击主屏幕以显示正在运行的应用程序。你的屏幕截图是错误的。我认为要真正解决这个问题,我需要弄清楚我的旋转/布局代码中触发iOS中与重叠动画相关的错误。与此同时,我推迟了布局,直到我的应用程序变为活动状态。 – Craig

回答

0

事实证明,没有办法阻止向应用程序报告轮换事件。我怀疑这是一个iOS错误。但是,在应用程序状态为UIApplicationStateBackground时忽略viewWillTransitionToSize:withTransitionCoordinator:,并在视图的layoutSubviews(如果存在)中执行相同操作可以解决此问题。

1

我想不出有任何理由为什么它会是有用的或正确获得viewWillTransitionToSize在后台,所以只是反弹,如果你背景是

if UIApplication.shared.applicationState == .background { 
    return 
} 

不过,这种感觉就像一个错误,在我看来你应该向Apple报告。

+0

换句话说:如果你实现'layoutSubviews',它是否被调用与你是否实现'viewWillTransitionToSize'无关。但是,这不是你所要求的。 – matt

+0

我们是否应该删除我们的评论?它会更干净。 – matt

+0

就像我建议的那样,删除所有评论。你的回答站立。评论是短暂的;我们用它们来讨论如何进行。现在辩论结束了。 – matt