ナビゲーションコントローラーの下の特定の画面のみでのiPhoneの自動回転
-
06-07-2019 - |
質問
これは、私が抱えている基本的な問題の単なる例です。この状況が少し無意味に聞こえても心配しないでください;)
主にUINavigationControllerであるアプリが2レベルの深さであるとします。最上位は画像ファイル名のリストを含むテーブルで、2番目のレベルにはタップしたファイル名の画像を表示するUIImageViewのみがあります。
このようなアプリの場合、ポートレートモードで画像の第2レベルを固定したまま、最上位のテーブルを自動回転できるようにする良い方法を知っている人はいますか?
これまでのところ、ほとんどそこに到達することができました...しかし、ランドスケープモードでファイル名をタップすると、2番目のレベルのView ControllerのshouldAutorotateToInterfaceOrientationがポートレートに対してのみyesを返しても、画像が間違った方向にスライドして表示されますモード。
解決
問題は、自動回転を使用すると、UI全体(私が信じているUIWindowインスタンスを含む)が回転することです。
この時点でNavigation Controllerにプッシュされるものはすべて、ランドスケープで実行されます。
したがって、imageviewをプッシュすると、まさにそれが得られます。
これを機能させるには、次のいずれかを行う必要があります:
- ルートビューの回転を処理する 手動(変換を使用)
- -PI / 2によるイメージビューの回転解除 変換を使用します。
これを機能させるには、手動で変換を実行する必要がある方法。
補足として、これはUIデザインに問題がある可能性があります。ユーザーとしては、画像をドリルダウンして右側に表示されることを期待しています。しかし、これはアプリの正確なコンテキストを知らないことです。
他のヒント
iPhone OS 2.xではこれを行う良い方法はありませんでしたが、3.0では劇的に改善されました。
2.xでは、 shouldAutorotateToInterfaceOrientation:
デリゲートメソッドは、方向への変更のみに応じていたため、説明した動作が得られます:回転した場合別のView Controllerでは、新しいView Controllerがその方向への回転をサポートしていなくても、プッシュとポップによって回転したままになります。
3.0では、UINavigationControllerはプッシュまたはポップのたびに shouldAutorotateToInterfaceOrientation:
をポーリングし、予想される方法を返すものに従います。たとえば、現在横向きで左向きに回転していて、 shouldAutorotateToInterfaceOrientation:
を介してPortrait方向のみをサポートするView Controllerのインスタンスは、自動的かつ即座に論理方向を反転し、Portrait方向の正しい方法で新しいビューにスライドします。
これは、3.0にリンクされている(したがって必要な)アプリケーションでのみ機能することに注意してください。 2.xにリンクされているアプリケーションの場合、古い動作をエミュレートします。