iOS 5 和 ios6 兼容的自動旋轉設定有點坑人..
首先,專案設定有可支援方向
這設定是全域性的,整個 app 能支援的方向都在這邊設定
但是個別的 VC 旋轉設定要在各 VC 中自行設定
而 iOS 5, iOS 6 的設定方法並不相同
iOS 5
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
//檢查是否為可旋轉方向
}
// 設定旋轉後配置,可用其他方法
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
// in iOS statusBarOrientation is correct than all other orientation changes
if(UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation))
self.view.frame = CGRectMake(0,0,1024,768);
else
self.view.frame = CGRectMake(0,0,768,1024);
}
iOS 6
如果每個 VC 都要旋轉,就算了
如果不是,在最底層的 VC 要先設定如下方法,禁用自動旋轉
- (BOOL)shouldAutorotate {
return NO;
}
然後在需要旋轉的 VC 使用
- (BOOL)shouldAutorotate{
return YES;
}
- (NSUInteger)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return UIInterfaceOrientationLandscapeRight;
}
此外,在 ios 6 底下
window 需要设置 rootViewController,[window addSubview:navController.view]; 无效;
shouldAutorotate 在最底层设置才有效;
presentModalViewController 下用之前的自动旋转控制无效,须用 category 解决。
參考資料
http://fann.im/blog/2012/10/22/autorotation-changes-in-ios-6/