1

iPad用のアプリケーションを作っています。私は横向きにとどまらなければならないビューコントロールを持っています、これはうまく機能します。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{
   return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

このビューから他のビューに向かって押すと、ユーザーがiPadを傾けるたびに、この子ビューが適切な回転(横向きまたは縦向き)に回転するはずです。この子ビューでは、このコードを使用してこれを実現していますが、機能しません。それは風景に固執します。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
    return YES;
}
4

1 に答える 1

1

ビューコントローラが回転をサポートするには、その階層内のすべてのビューコントローラが回転をサポートしている必要があります。

向きの変更への対応のドキュメントから:

ウィンドウは適切なViewControllerを探し、そのshouldAutorotateToInterfaceOrientation:メソッドを呼び出して、新しい方向をサポートしているかどうかを判断します。

コンテナビューコントローラは、このメソッドをインターセプトし、独自のヒューリスティックを使用して、方向の変更が発生するかどうかを判断する場合があります。たとえば、タブバーコントローラは、すべての管理対象ビューコントローラが新しい方向をサポートしている場合にのみ方向の変更を許可します。

さらに、単一の画面を管理するために複数のViewControllerを使用しないでください。

View Controllerプログラミングガイドのドキュメントから(私の強調):

ビューコントローラとそのビュー階層内のビューの間の1対1の対応は、重要な設計上の考慮事項です。同じビュー階層の異なる部分を管理するために、複数のコンテンツビューコントローラを使用しないでください。同様に、単一のコンテンツビューコントローラオブジェクトを使用して、複数の画面に相当するコンテンツを管理しないでください。

この場合、親View Controllerで回転処理を無効にし、子View Controllerを単純なビューに変更し(上記の基準を満たすため)、方向の変更を手動で監視して子Viewのレイアウトを更新することをお勧めします。

UIDeviceOrientationDidChangeNotification通知を聞くことで、向きの変化を監視できます。コード例:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

[nc addObserver:self selector:@selector(yourSelector:)
    name:UIDeviceOrientationDidChangeNotification object:nil];

アップデート

「プッシュ」とは、ビューコントローラーをナビゲーションビューコントローラーにプッシュすることを意味する場合は、応答の2番目の部分を無視してください。

この場合、回転処理をサポートするために、shouldAutorotateToInterfaceOrientation:戻るナビゲーションコントローラーとビューコントローラーのメソッドをオーバーライドしていることを確認する必要があります。YES

于 2012-03-20T13:50:36.457 に答える