3

ランドスケープモードへの回転をサポートするビューコントローラー(VC1)があります。しかし、次のビュー (VC2) では、ポートレート モードでのみ表示したいだけです。つまり、ユーザーが VC1 をランドスケープ モードで使用して VC2 に移動すると、ビューはランドスケープの境界に従ってフレームを設定します。これは望ましくありません。ユーザーが既にポートレート モードの VC2 にいて、デバイスの向きをランドスケープに変更し、VC2 が自動回転をサポートしていない場合と同じように、ビューを 90 度回転させて表示する必要があります。

これは、親ビュー コントローラーも自動回転をサポートしていない場合にのみ発生することに気付きました。親ビューが自動回転をサポートしていない場合、子ビューは横向きモードで押すか表示すると 90 度回転して表示されます。

4

1 に答える 1

0

私がこれを解決した方法は、プロジェクト全体を縦向きのみとして表示し、回転する必要があるビューでは、以下のように viewDidLoad に NSNotifier を設定することでした。

NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(handleOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

次に、次のように方向の変更を処理します。

-(void)handleOrientationDidChange:(NSNotification *)notification
{
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];

if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
    // Change view frame to fit landscape mode and rotate
} else {
    // Reset view frame to fit portrait mode and rotate back to orignal position
}

これがあなたのニーズに合うかどうかはわかりませんが、VC1 がローテーションする必要があり、VC2+ がローテーションしなかった状況をどのように処理したかを説明します。

于 2012-12-14T09:06:10.190 に答える