iOS 6 のローテーションをサポートしたい。問題は、私は多くのドキュメントとスタック オーバーフローの質問を調べてきましたが、少しでも詳細な解決策が見つからないことです。これら 2 つのメソッドをビュー コントローラー クラスに追加する必要があることだけを確認しましたが、間違っていなければ、iOS 6 以前のメソッドと同じように動作しません。
- (BOOL)shouldAutorotate
{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll; // use what is appropriate for you.
}
私のアプリは現在、次のコードを使用して iOS6 より前にローテーションします。ビュー コントローラーをプッシュするかどうかを決定するために、インターフェイスの向きのパラメーターを使用していることに注意してください。iOS 6 ローテーション デリゲートでこれを実装するにはどうすればよいですか?
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
UIInterfaceOrientation toOrientation = self.interfaceOrientation;
if ( self.tabBarController.view.subviews.count >= 2 )
{
UIView *tabBar = [self.tabBarController.view.subviews objectAtIndex:1];
if(toOrientation != UIInterfaceOrientationLandscapeLeft && toOrientation != UIInterfaceOrientationLandscapeRight)
{
CUSTOM_DEBUG_LOG("\n\nRotated back to Portrait");
tabBar.hidden = FALSE;
}
}
}
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
CUSTOM_DEBUG_LOG("\nView going landscape");
ScrollViewController *s = [[ScrollViewController alloc] initWithNibName:@"ScrollViewController" bundle:nil];
[self.navigationController pushViewController:s animated:NO];
[s release];
self.tabBarController.tabBar.hidden = YES;
self.navigationController.navigationBar.hidden = YES;
}
}