IPhoneアプリを作成していますが、ポートレートモードにする必要があるため、ユーザーがデバイスを横に動かしても、自動的に回転しません。これどうやってするの?
特定のView Controllerの向きを無効にする、 supportedInterfaceOrientations
および preferredInterfaceOrientationForPresentation
をオーバーライドする必要があります。
- (NSUInteger) supportedInterfaceOrientations {
// Return a bitmask of supported orientations. If you need more,
// use bitwise or (see the commented return).
return UIInterfaceOrientationMaskPortrait;
// return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}
- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {
// Return the orientation you'd prefer - this is what it launches to. The
// user can still rotate. You don't have to implement this method, in which
// case it launches in the current orientation
return UIInterfaceOrientationPortrait;
}
IOS 6より古いものをターゲットにしている場合、 shouldAutorotateToInterfaceOrientation:
メソッドが必要です。 yesを返すタイミングを変更することにより、指定した方向に回転するかどうかを決定します。これにより、通常の縦向きのみが許可されます。
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
// Use this to allow upside down as well
//return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
shouldAutorotateToInterfaceOrientation:
はiOS 6.0で非推奨になったことに注意してください。
それを逃した人のために:プロジェクト設定画面を使用して、アプリ全体で方向を修正できます(すべてのコントローラーでメソッドをオーバーライドする必要はありません):
サポートされているインターフェイスの向きを切り替えるのと同じくらい簡単です。左側のパネルでプロジェクトをクリックし、アプリのターゲット> [概要]タブをクリックして見つけることができます。
Swift navigationControllerがある場合、次のようにサブクラス化します(ポートレートのみ):
class CustomNavigationViewController: UINavigationController {
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.portrait
}
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return UIInterfaceOrientation.portrait
}
}
クラスからメソッドshouldAutorotateToInterfaceOrientation
を完全に削除することもできます。ローテーションを計画していない場合、クラスにメソッドを含めることは意味がありません。コードが少なければ少ないほど、物事をきれいに保ちます。