web-dev-qa-db-ja.com

iOS7で横向きと自動回転を強制する

私のアプリは横向きのみであるはずですが、iOS 6以前のビルドでは問題ありませんでした。 iOS 7、を使用すると、まったく回転しません。

私のアプリの設定では、横向きの左/右のみに設定しています。私のビューコントローラーでは、次のものを使用しています。

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}

以前はこれを使用していましたが、現在は非推奨になっています。

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

新しいものはshouldAutorotateのようですが、これを使用するとアプリがクラッシュします。私のアプリはiPadとシミュレーターでポートレートを強制されるので、これに関するアイデアをいただければ幸いです。ありがとうございました!

11
ultra

これは私の問題を解決します。以前に問題が発生した理由はわかりませんが、この正確な組み合わせを試すのを逃したに違いありません(また、info.plistにはサポートされている方向が設定されている必要があります)。

(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

(BOOL)shouldAutorotate {
    return YES;
}

編集:シミュレーターに問題がある可能性があり、リセット/再起動とクリーンアップを実行することで修正に貢献した可能性があります。

12
ultra

このメソッドもコードに含めます。

- (BOOL)shouldAutorotate{
  if([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft ||[[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeRight)
  {
    return YES;
  }
  else{
    return NO;
  }
}

詳細は this を参照してください。ここでは、方向を抑制するためにshouldAutorotateをオーバーライドする必要があると述べています。

自動回転を一時的に無効にする場合は、方向マスクを操作しないでください。代わりに、最上位のViewControllerでshouldAutorotateメソッドをオーバーライドします。このメソッドは、自動回転を実行する前に呼び出されます。 NOを返す場合、回転は抑制されます。

4
Puneet Sharma

理由はわかりませんが、これはIOS 7

[[UIApplication sharedApplication] setStatusBarHidden:NO];

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];

[super willRotateToInterfaceOrientation:UIInterfaceOrientationPortrait duration:0];
1

シミュレータで問題が発生した可能性があり、リセット/再起動およびクリーンアップを行ったことが修正に貢献した可能性があります。

これは私のために働いた:(シミュレーター->コンテンツと設定のリセット...)

0
ShanghaiD