2011-10-25 16 views
2

私は動的デバイスの向きをサポートするOpenGLアプリケーションを持っています。私は4つの物理的な方向のいずれかにデバイスを回転することができ、すべてが期待どおりに動作します。モーダルビューコントローラを表示しているときのデバイスの回転

これでモーダルビューコントローラが追加されました。これは設定ビュー(これは非OpenGLです)を取得できるようにしました。モーダルビューコントローラは、任意のデバイス方向をサポートします。

しかし、モーダルビューコントローラを向きA(例えばポートレート)で表示し、向きB(横向きなど)で表示した場合、その表示が消えた後に、OpenGLビューが壊れてしまいます。私はOpenGLビューがそれ自身を '修正'するためにデバイスを異なる向きに向ける必要があります。

モーダルビューコントローラが終了すると、アプリケーションは既に方向Bにあると思うので、OpenGLビューを回転させることはありません。

モーダルコントローラの回転を無効にすると、モーダルコントローラがAの方向に表示され、デバイスがBの方向に回転し(モーダルビューコントローラが回転しなくなります)、コントローラを閉じると、OpenGLビューはwillRotateToInterfaceOrientation/didRotateFromInterfaceOrientationと方向Bに適切に向きを設定します。

モーダルコントローラの動的方向を保持する方法はありますか?また、モーダルコントローラを解除した後でもOpenGLビューも適切に回転しますか?

ありがとうございます。

+0

あなたはOpenGLビューを更新するために回転の変化を検出するためにどのメカニズムを使用していますか?フレームを調整するOpenGLビューのプレゼンテーションを管理するのは何ですか? – Jonah

+0

OpenGL View ControllerのshouldAutorotateToInterfaceOrientationがYESを返します。 willRotateToInterfaceOrientationはOpenGLビューコントローラで呼び出されます。 layoutSubviewsは、OpenGLバッファを解放するOpenGLビューで呼び出されます。次にrender関数が呼び出されると、OpenGLバッファは幅と高さを入れ替えて再作成されます。 – iraxef

+0

モーダルが似顔絵で固定されていると、どのように動作しましたか?私はちょうどその同じ問題をahve – jfisk

答えて

1

私はカスタムアクションシートで同様の問題がありました。最も簡単な答えは、ビューが表示されている間、一時的に回転を禁止することになると判断しました。アクションシートが提示されるたびに、Apple Notesアプリでその例を見ることができます。向きがロックされます。

私はあなたがすでにこれを試したことを知っていて、うまくいきます。それを有効な解決策と考えるべきだと思います。

私はそうでなければ解決方法がわかりませんが、おそらくモダルビューコントローラの向きに変更を保存し、それらを同時にOpenGL View Controllerに渡す必要があります設定ビューを解除し、手動で再レンダリングします。

+0

良い点..! :) – NightFury

関連する問題