1

このアプリは、iOS5で横向きで完全に正常に動作していました。ただし、iOS6では、すべてのViewControllerで縦向きを使用するようになりました。メソッドshouldAutorotateToInterfaceOrientationはもう呼び出されません。iOS6で変更された回転メカニズムに関する新しい記事を読み、 AppDelegateに行を追加することでそれを修正することができました。

self.window.rootViewController = _viewController

_viewControlerは開始画面(ホームメニュー)です。他のすべてのビューコントローラはshouldAutorotateToInterfaceOrientationメソッドを実装し、横向きの場合にのみYESを返します。したがって、1つの方向のみをサポートする必要があるアプリにとっては完全に機能するソリューションです。

ただし、問題は、縦向きで表示するために1つのView Controller(phone-VCと呼びます)が必要なことです。ここで、このビューコントローラを回転させたい場合は、appDelegateのrootViewControlerに割り当てられているホームメニューコントローラでYESを返す必要があります。ただし、このrootViewControllerは横向きでのみ表示する必要がある開始ウィンドウであるため、これを行うことはできません。そうしないと、このウィンドウのグラフィックを含むレイアウトが壊れます。しかし、shouldAutorotateToInterfaceOrientation(ホームメニュー)からYESを返さない場合、同じメソッドがビューphone-VCで呼び出されず、縦向きで表示する必要があります。

何か案は?AppDelegateではrootViewControllerの割り当ては必須ですか?

更新:問題はデバイスに存在します(少なくともiPhone4では)。

4

1 に答える 1

1

はい、iOS 6.0以降では、rootviewcontrollerをWindows.rootViewControllerに割り当てる必要があります。このコントローラーは、子供が回転するかどうかを決定します。デフォルトではすべての方向がサポートされていますが、shouldAutoRotateおよびsupportedInterfaceOrientationsデリゲートメソッドを実装することで制限できます。ウィンドウにサブビューとしてviewcontrollerを追加していたMGSplitViewControllerを使用して、Windowsにrootviewcontrollerが割り当てられていないインスタンスがありました。rootviewcontrollerを作成するために変更する必要があり、すべて正常に機能しました。

AppleドキュメントのUIKitセクションを確認してください-iOS6.0リリースノート。

于 2012-10-10T10:21:54.633 に答える