3

iOS 6用にアプリを更新していますが、自動回転の変更に問題があります。私のアプリにはたくさんのビューコントローラーがあり、それらはすべて、逆さまを除いて3つの方向すべてをサポートする必要がある1つを除いて、縦向きのレイアウトのみをサポートする必要があります。

アプリデリゲートにメソッドを追加するapplication:supportedInterfaceOrientationsForWindow:場合、ローテーションできるようにしたい1つのVCを表示しているかどうかを確認するために、そこに条件を追加する必要がありますか?

ドキュメントには、VCに実装する場合supportedInterfaceOrientations、アプリデリゲートメソッドをオーバーライドする必要があると記載されていますが、そうではないようです。子VCのメソッドにlogステートメントがあり、VCが読み込まれると一度呼び出されますが、デバイスを回転させると呼び出されませんが、アプリデリゲートのメソッドは呼び出されます。

アプリデリゲートからメソッドを完全に削除すると、VCの向きは、アプリでサポートされているインターフェイスの向きの設定に完全に依存しているように見えます。supportedInterfaceOrientationsこれはもちろん、VCの作成時にメソッドが一度呼び出されたためと思われますが、デバイスが回転したときに呼び出されることはありません。

誰かアイデアや提案はありますか?よろしくお願いします。

4

3 に答える 3

13

に置き換え [window addSubview:viewController.view]; ます window.rootViewController = viewController;

于 2012-09-21T06:24:03.073 に答える
3

また、オーバーライドする必要があります-(BOOL)shouldAutorotateそして「YES」を返します。これにより、VCがサポートする方向を「supportedInterfaceOrientations」で宣言し、回転時に「shouldAutorotate」を呼び出す必要があります。ナビゲーションコントローラーまたはタブバーがある場合は、それらの中で同じことを行うためにそれらをサブクラス化する必要があるかもしれません。私は最近この問題を自分で抱えていました。

于 2012-09-20T17:57:55.417 に答える
0

これを試して...

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{

    if (UIInterfaceOrientationIsLandscape(interfaceOrientation))  
    { 
        // here to  implement landscope code
    }
    else
    {  
        // here to  implement setframePortrait
    }
}
于 2012-09-26T13:34:56.990 に答える