2

解決済み:

この問題を回避する唯一の方法は (私が知る限り)、自由に回転するビュー コントローラーを階層の外に出すことです。これを行う 1 つの方法は、自由に回転するコントローラーをアプリ デリゲート ルートコントローラーに一時的に割り当てることです。このように、回転しても階層の残りの部分は影響を受けません。


プッシュするコントローラーがあり、supportedInterfaceOrientations が適切に呼び出され、値が適切に返されます。縦向きを強制しています。ナビゲーターとタブ コントローラーをサブクラス化したので、関連するメソッドが正常に呼び出されます。実際、この1つの問題を除いて、すべてが完全に機能します:

縦向きのみをサポートする特定のコントローラーから、すべての向きをサポートする別のコントローラーをプッシュします。

この 2 番目のコントローラーで、デバイスを横向きに変更し、横向きモードでこのコントローラーをポップすると、次のようになります。

元のコントローラーでは、supportedInterfaceOrientations は正常に呼び出され (Autorotate が YES を返す必要があります)、以前と同じ向きの値 (縦向きのみ) が返されます。ただし、ポートレートのみを渡しますが、コントローラーのコンテンツはまだランドスケープです。

ブレークポイントを使用して、supportedInterfaceOrientations が毎回呼び出されることを確認しました。ただし、子コントローラーのランドスケープ コントローラーがポップされた場合、戻り値は適用されません。

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]; を追加してみました。viewWillAppear に表示されますが、1) 機能しません。また、2) これでアプリが拒否されることはありませんか?

どうすればこの問題を解決できますか?

編集、ここにいくつかのコードがありますが、私の問題は非常に基本的です。

コントローラー 1 では、これらは常に呼び出されます。

-(BOOL)shouldAutorotate{
    return NO;
    ///return YES; // does not matter
}


-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskPortrait;

}

次に、ある時点で 2 番目のコントローラー (ビデオ プレーヤー) を押します。

[self presentModalViewController:playerController animated:YES];

コントローラ 2 で:

-(BOOL)shouldAutorotate{
    return YES;
}


-(NSUInteger)supportedInterfaceOrientations{

    return UIInterfaceOrientationMaskAll;

}

繰り返すステップ:

1) app を起動すると、コントローラ 1 がポートレート モードで表示されます。これはマスクが返されたためです。しかも回転しません。

2) コントローラー 2 を押します (またはモーダルで提示することもできます)。

3) これが回転します。横向きモードに回転します。

4) ポップコントローラー 2.

5) コントローラー 1 はランドスケープ モードになりますが、shouldAutorotate と supportedInterfaceOrientations が呼び出され、コントローラー 1 のコードに示すように値が返されます。

4

1 に答える 1

0
//add code in your controller 1

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
于 2013-06-21T04:48:47.113 に答える