2017-11-11 126 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