iOS屏幕旋轉(zhuǎn)中的坑

屏幕旋轉(zhuǎn)是個(gè)坑

最近做的項(xiàng)目中有不少地方遇到了需要旋轉(zhuǎn)屏幕的地方,在屏幕旋轉(zhuǎn)的大坑里掙扎了一番,發(fā)現(xiàn)網(wǎng)上很多關(guān)于屏幕旋轉(zhuǎn)的文章講的大同小異,而且很多方法都已經(jīng)失效,所以特此寫下這篇爬坑紀(jì)錄。


常規(guī)的屏幕旋轉(zhuǎn)

最常規(guī)的屏幕旋轉(zhuǎn)方法應(yīng)該是在控制器中實(shí)現(xiàn)如下3個(gè)方法

// 是否支持自動(dòng)旋轉(zhuǎn)屏幕
- (BOOL)shouldAutorotate {
    return NO;
}
// 旋轉(zhuǎn)支持的屏幕方向
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}
// 默認(rèn)屏幕方向
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

一般,只要設(shè)置好這三個(gè)方法就可以達(dá)到屏幕旋轉(zhuǎn)的效果。

但是!當(dāng)你真正來實(shí)現(xiàn)這個(gè)方法的時(shí)候,你會(huì)發(fā)現(xiàn),很多時(shí)候屏幕并不能旋轉(zhuǎn)!

這是為什么呢?下面來講講原因。


屏幕旋轉(zhuǎn)中的坑

在屏幕旋轉(zhuǎn)中,其實(shí)有不少坑。如果對(duì)屏幕旋轉(zhuǎn)的了解不深的話,可能就會(huì)掉進(jìn)去。

  1. 如果想要屏幕旋轉(zhuǎn),必須在根控制器中實(shí)現(xiàn)。如果根控制器是TabbarController,上面的三個(gè)方法就要在TabbarController中實(shí)現(xiàn),如果根控制器是NavigationController,就要在NavigationController中實(shí)現(xiàn)。如果不想修改根控制器,而想讓新控制器支持屏幕旋轉(zhuǎn),那么就只能通過modal的方式彈出新控制器,然后在新控制器中實(shí)現(xiàn)上面的三個(gè)方法。

  2. 就算你按照我上面說的方法來做,可能你會(huì)發(fā)現(xiàn),屏幕還是沒有旋轉(zhuǎn)。這是為什么呢?這是因?yàn)?,你在Target -> General -> Device Orientation中不支持你要旋轉(zhuǎn)的屏幕方向。如果你打開所有你應(yīng)用中需要的屏幕方向,你就會(huì)發(fā)現(xiàn),上面的方法又都可以用了。是不是很開心?

設(shè)置設(shè)備支持屏幕方向

非常規(guī)的屏幕旋轉(zhuǎn)

對(duì)大部分情況來說,上面的代碼已經(jīng)夠用了。但是,這樣的代碼在iPhonePlus上有時(shí)候會(huì)出現(xiàn)一些BUG。
在什么情況下呢?在,當(dāng)你的應(yīng)用只支持豎屏,而在應(yīng)用中的某些特定頁面(例如視頻播放頁)卻支持橫豎屏方向時(shí),會(huì)出現(xiàn)一個(gè)Bug。這個(gè)Bug只有在Plus上才會(huì)出現(xiàn)。因?yàn)橹挥蠵lus才會(huì)出現(xiàn)這種情況。

Plus橫屏.png

這種情況下如果按照上面的方法進(jìn)入應(yīng)用,進(jìn)入應(yīng)用時(shí)屏幕方向就會(huì)變成默認(rèn)橫屏,而且由于你設(shè)置了不支持自動(dòng)旋轉(zhuǎn),應(yīng)用就會(huì)一直橫屏。這下就壞啦。。。
那么這種情況該怎么辦呢?
答案是在Target -> General -> Device Orientation只支持豎屏。然后在AppDelegate中實(shí)現(xiàn)如下代碼:

// 設(shè)置設(shè)備支持的旋轉(zhuǎn)方向
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

這樣,Bug就解決啦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,365評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,756評(píng)論 4 61
  • 第十天。我感覺像做了一個(gè)很長很真實(shí)的夢(mèng),我想醒來,但是我做不到,夢(mèng)里的每個(gè)人都帶著孝帶,綁著絲,連我的侄姑涼...
    南房姑涼閱讀 598評(píng)論 0 0
  • 7月31抵達(dá)北京,8月1正式開始求職之旅,今天8月9,期間有個(gè)周六日兩天休息,總計(jì)求職時(shí)間是7天,剛好一周,面試了...
    楊穎__指數(shù)成長閱讀 1,301評(píng)論 6 5
  • --巴赫 賦格曲,一種公認(rèn)難懂的音樂表現(xiàn)手法不過要是本著中國人“和”而不同的態(tài)度.在理解上可能會(huì)是個(gè)角度........
    Zoe1009閱讀 770評(píng)論 0 0

友情鏈接更多精彩內(nèi)容