(转)iOS 6的Rotation--详细版本
iOS 6的rotation改變了很多。先來(lái)看看官方的描述??http://www.bgr.com/2012/08/06/ios-6-beta-4-change-log-now-available/
?
知識(shí)點(diǎn):
*UIViewController的shouldAutorotateToInterfaceOrientation方法被deprecated。在ios6里,是使用supportedInterfaceOrientations and shouldAutorotate 2個(gè)方法來(lái)代替shouldAutorotateToInterfaceOrientation。注意:為了向后兼容iOS 4 and 5,還是需要在你的app里保留shouldAutorotateToInterfaceOrientation。
for ios 4 and 5, 如果沒(méi)有重寫(xiě)shouldAutorotateToInterfaceOrientation,那么對(duì)于iphone來(lái)講,by default是只支持portrait,不能旋轉(zhuǎn)。
for ios 6, 如果沒(méi)有重寫(xiě)shouldAutorotate and supportedInterfaceOrientations,by default, iphone則是"可以旋轉(zhuǎn),支持非upside down的方向",而ipad是"可以選擇,支持所有方向"
?
example 1: for ios 4 and 5, iphone device, 若要"可以旋轉(zhuǎn),支持非upside down的方向",則可以在view controller里
?
[cpp]?view plaincopy
example 2: for ios 6, iphone device, 若要“不能旋轉(zhuǎn),只支持portait",則可以在view controller里
?
?
[cpp]?view plaincopy
example 3: for ios 6, ipad device, 若要“可以旋轉(zhuǎn),只支持landscape",則可以在view controller里
?
?
[cpp]?view plaincopy
?
* 在iOS 4 and 5,都是由具體的view controller來(lái)決定對(duì)應(yīng)的view的orientation設(shè)置。而在iOS 6,則是由top-most? controller來(lái)決定view的orientation設(shè)置。
舉個(gè)例子:你的app的rootViewController是navigation controller "nav", 在”nav"里的stack依次是:main view -> sub view > sub sub view,而main view里有一個(gè)button會(huì)present modal view "modal view".
那么for ios 4 and 5,在ipad里,如果你要上述view都僅支持橫屏orientation,你需要在上面的main view, sub view, sub sub view, model view里都添加
?
[cpp]?view plaincopy
而對(duì)于iOS6, 由于是由top-most controller來(lái)設(shè)置orientation,因此你在main view, sub view, sub sub view里添加下面的代碼是沒(méi)有任何效果的,而應(yīng)該是在nav controller里添加下列代碼。而modal view則不是在nav container里,因此你也需要在modal view里也添加下列代碼。
?
?
[cpp]?view plaincopy
注意:
?
*你需要自定義一個(gè)UINavigationController的子類(lèi)for "nav controller",這樣才可以添加上述代碼。
* 和navigation controller類(lèi)似,tab controller里的各個(gè)view的orientation設(shè)置應(yīng)該放在tab controller里
?
for ios6的top-most controller決定orientation設(shè)置,導(dǎo)致這樣一個(gè)問(wèn)題:在 top-most controller里的views無(wú)法擁有不相同的orientation設(shè)置。例如:for iphone, 在nav controller里,你有main view, sub view and sub sub view,前2個(gè)都只能打豎,而sub sub view是用來(lái)播放video,可以打橫打豎。那么在ios 4 and 5里可以通過(guò)在main view and sub view的shouldAutorotateToInterfaceOrientation里設(shè)置只能打豎,而在sub sub view的shouldAutorotateToInterfaceOrientation設(shè)置打豎打橫即可。而在ios 6里則無(wú)法實(shí)現(xiàn)這種效果,因?yàn)樵趍ain view, sub view and sub sub view的orientation設(shè)置是無(wú)效的,只能夠在nav controller里設(shè)置。那么你可能想著用下列代碼在nav controller里控制哪個(gè)view打豎,哪個(gè)view打橫
?
[cpp]?view plaincopy
是的,這樣可以使得在main view and sub view里無(wú)法打橫,而sub sub view橫豎都行。但問(wèn)題來(lái)了,如果在sub sub view時(shí)打橫,然后back to sub view,那么sub view是打橫顯示的!
?
目前想到的解決方法只能是把sub sub view脫離nav controller,以modal view方式來(lái)顯示。這樣就可以在modal view里設(shè)置打橫打豎,而在nav controller里設(shè)置只打豎。
?
* 說(shuō)了那么多,其實(shí)如果你的app的所有view的orientation的設(shè)置是統(tǒng)一的,那么你可以簡(jiǎn)單的在plist file里設(shè)置即可,不用添加上面的代碼。而如果你添加了上面的代碼,就會(huì)覆蓋plist里orientation的設(shè)置。
?
* in iOS 6, 當(dāng)view controller present時(shí),不會(huì)call willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration:, and didRotateFromInterfaceOrientation: methods,只有在發(fā)生rotate的時(shí)候才會(huì)call
?
出處:http://blog.csdn.net/totogogo/article/details/8002173
轉(zhuǎn)載于:https://www.cnblogs.com/goodleixiao/archive/2012/12/19/2824597.html
總結(jié)
以上是生活随笔為你收集整理的(转)iOS 6的Rotation--详细版本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android自定义退出弹出框
- 下一篇: 安卓学习之--如何关闭所有的activi