2013年5月20日 星期一

iOS 5,iOS 6 自動旋轉設定

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/

沒有留言: