2011-10-25 48 views
2

我有一個支持動態設備方向的OpenGL應用程序。我可以將設備旋轉到4種物理方向中的任何一種,並且一切按預期工作。顯示模態視圖控制器時的設備旋轉

現在我添加了一個模態視圖控制器,以便您可以獲取設置視圖(這是非OpenGL)。模態視圖控制器也支持任何設備方向。但是,如果我以方向A(例如縱向)呈現模態視圖控制器並將其以方向B(例如橫向右)排除,則在其昏暗後,OpenGL視圖已損壞(縱橫比看起來不正確) 。我必須將設備定向到OpenGL視圖的不同方向以「修正」自身。

當模式視圖控制器被解散時,它就像應用程序認爲它已經在方向B,所以它不會旋轉OpenGL視圖。

如果我禁用模態視圖控制器上的旋轉,那麼如果我以方向A呈現模態控制器,將設備旋轉到方向B(模態視圖控制器不再旋轉)並關閉控制器,則OpenGL視圖將獲取willRotateToInterfaceOrientation/didRotateFromInterfaceOrientation並正確定向到方向B.

有什麼方法可以保留模態控制器的動態方向,但在模態控制器關閉後OpenGL視圖也能正確旋轉嗎?

謝謝。

+0

您使用哪種機制來檢測旋轉變化以更新OpenGL視圖?什麼管理可能會調整其框架的OpenGL視圖的呈現? – Jonah

+0

OpenGL視圖控制器的shouldAutorotateToInterfaceOrientation返回YES。在OpenGL視圖控制器上調用willRotateToInterfaceOrientation。在OpenGL視圖上調用layoutSubviews,釋放OpenGL緩衝區。下一次調用渲染函數時,將使用交換的寬度/高度重新創建OpenGL緩衝區。 – iraxef

+0

當模式修復爲縱向模式時,你是如何得到它的工作的?我同樣的問題,只是 – jfisk

回答

1

我有一個類似的問題與自定義操作表,並決定最簡單的答案是臨時禁止旋轉,而視圖呈現。您可以在Apple Notes應用程序中看到此示例,無論何時呈現操作表,該方向都會被鎖定。

我知道你已經試過這個,它的工作原理,我認爲你應該認爲這是一個有效的解決方案。

我不確定如何解決它,否則,您可能需要在您的模式視圖控制器中存儲方向的任何更改,並將它們傳回給OpenGL視圖控制器,可以同時或一次在點關閉設置視圖,然後手動重新渲染。

+0

好點..! :) – NightFury

相關問題