3

UITabBarController に埋め込まれた UINavigationController に埋め込まれた UITableViewController で実行された選択アクションの後に提示される MPMoviePlayerViewController を介してビデオを再生するアプリケーションがあります。

TabBar コントローラー > ナビゲーション コントローラー > テーブル ビュー コントローラー * MPMoviePlayerViewController

iOS5 ではすべてが期待どおりに動作しますが、iOS6 にアップグレードすると、ビデオが提示された後に期待どおりに回転しないことがわかりました。ターゲットの概要ページでより多くのサポートされているインターフェイスの向きを選択すると、アプリケーション全体が回転します。

Apple のドキュメントでは、UIViewController クラス リファレンスに次のように記載されています。

iOS 6 では、アプリは、アプリの Info.plist ファイルで定義されたインターフェイスの向きをサポートします。View Controller は supportedInterfaceOrientations メソッドをオーバーライドして、サポートされている向きのリストを制限できます。通常、システムは、ウィンドウのルート ビュー コントローラー、または画面全体に表示されるビュー コントローラーでのみ、このメソッドを呼び出します。子View Controllerは、親View Controllerによって提供されたウィンドウの一部を使用し、どの回転がサポートされているかに関する決定に直接参加しなくなりました。アプリの方向マスクとビュー コントローラーの方向マスクの交点は、ビュー コントローラーを回転できる方向を決定するために使用されます。

しかし、子View Controllerが実際に回転の決定にいつ参加しているのかはわかりません。タブ バー コントローラーの応答方法shouldAutorotatesupportedInterfaceOrientations、映画の再生時を変更する必要がありますか?

4

1 に答える 1

1

基本的な答えは、すべてのビュー コントローラーの回転動作は「最上位」のビュー コントローラーによって決定されるということですが、MPMoviePlayerViewController は「画面全体を埋めるように表示されるビュー コントローラー」として機能するため、独自の回転動作を決定します。

たとえば、単一ビューのアプリケーションがある場合、自動回転メソッドは単一ビューのビュー コントローラーで処理されます。そのビューをタブ バーに埋め込むと、タブ バー コントローラーの実装がそれらのメッセージを処理します。ビューをタブ バー内のナビゲーション バーに埋め込んだ場合でも、タブ バーの実装はメッセージを処理するものになります (他のビュー コントローラーがその中に埋め込まれている場合でも、それは「ルート ビュー コントローラー」です)。

MPMoviePlayerViewController は shouldAutorotate に YES を返し、横向きをサポートします。ムービーが回転しないようにすることは引き続き可能ですが (ターゲットの概要ページで縦向きを選択しないことにより)、View Controller 階層に対して選択した設定は、その機能には影響しません。MPMoviePlayerViewController が表示されると、自動回転メッセージを処理するビュー コントローラーになります。表示されていない場合は、Tab Bar Controller が担当します。

于 2012-10-08T03:44:40.550 に答える