屏幕旋轉是個坑
最近做的項目中有不少地方遇到了需要旋轉屏幕的地方,在屏幕旋轉的大坑里掙扎了一番,發現網上很多關于屏幕旋轉的文章講的大同小異,而且很多方法都已經失效,所以特此寫下這篇爬坑紀錄。
常規的屏幕旋轉
最常規的屏幕旋轉方法應該是在控制器中實現如下3個方法
// 是否支持自動旋轉屏幕
- (BOOL)shouldAutorotate {
return NO;
}
// 旋轉支持的屏幕方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
// 默認屏幕方向
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
一般,只要設置好這三個方法就可以達到屏幕旋轉的效果。
但是!當你真正來實現這個方法的時候,你會發現,很多時候屏幕并不能旋轉!
這是為什么呢?下面來講講原因。
屏幕旋轉中的坑
在屏幕旋轉中,其實有不少坑。如果對屏幕旋轉的了解不深的話,可能就會掉進去。
如果想要屏幕旋轉,必須在根控制器中實現。如果根控制器是TabbarController,上面的三個方法就要在TabbarController中實現,如果根控制器是NavigationController,就要在NavigationController中實現。如果不想修改根控制器,而想讓新控制器支持屏幕旋轉,那么就只能通過modal的方式彈出新控制器,然后在新控制器中實現上面的三個方法。
就算你按照我上面說的方法來做,可能你會發現,屏幕還是沒有旋轉。這是為什么呢?這是因為,你在Target -> General -> Device Orientation中不支持你要旋轉的屏幕方向。如果你打開所有你應用中需要的屏幕方向,你就會發現,上面的方法又都可以用了。是不是很開心?
非常規的屏幕旋轉
對大部分情況來說,上面的代碼已經夠用了。但是,這樣的代碼在iPhonePlus上有時候會出現一些BUG。
在什么情況下呢?在,當你的應用只支持豎屏,而在應用中的某些特定頁面(例如視頻播放頁)卻支持橫豎屏方向時,會出現一個Bug。這個Bug只有在Plus上才會出現。因為只有Plus才會出現這種情況。
這種情況下如果按照上面的方法進入應用,進入應用時屏幕方向就會變成默認橫屏,而且由于你設置了不支持自動旋轉,應用就會一直橫屏。這下就壞啦。。。
那么這種情況該怎么辦呢?
答案是在Target -> General -> Device Orientation只支持豎屏。然后在AppDelegate中實現如下代碼:
// 設置設備支持的旋轉方向
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return UIInterfaceOrientationMaskAllButUpsideDown;
}
這樣,Bug就解決啦。