iOS 6的rotation改变了不少。先来看看官方的描述 http://www.bgr.com/2012/08/06/ios-6-beta-4-change-log-now-available/ios
知识点:app
*UIViewController的shouldAutorotateToInterfaceOrientation方法被deprecated。在ios6里,是使用supportedInterfaceOrientations and shouldAutorotate 2个方法来代替shouldAutorotateToInterfaceOrientation。注意:为了向后兼容iOS 4 and 5,仍是须要在你的app里保留shouldAutorotateToInterfaceOrientation。iphone
for ios 4 and 5, 若是没有重写shouldAutorotateToInterfaceOrientation,那么对于iphone来说,by default是只支持portrait,不能旋转。ide
for ios 6, 若是没有重写shouldAutorotate and supportedInterfaceOrientations,by default, iphone则是"能够旋转,支持非upside down的方向",而ipad是"能够选择,支持全部方向"
spa
example 1: for ios 4 and 5, iphone device, 若要"能够旋转,支持非upside down的方向",则能够在view controller里
.net
* 在iOS 4 and 5,都是由具体的view controller来决定对应的view的orientation设置。而在iOS 6,则是由top-most controller来决定view的orientation设置。orm
举个例子:你的app的rootViewController是navigation controller "nav", 在”nav"里的stack依次是:main view -> sub view > sub sub view,而main view里有一个button会present modal view "modal view".blog
那么for ios 4 and 5,在ipad里,若是你要上述view都仅支持横屏orientation,你须要在上面的main view, sub view, sub sub view, model view里都添加ip
*你须要自定义一个UINavigationController的子类for "nav controller",这样才能够添加上述代码。ci
* 和navigation controller相似,tab controller里的各个view的orientation设置应该放在tab controller里
for ios6的top-most controller决定orientation设置,致使这样一个问题:在 top-most controller里的views没法拥有不相同的orientation设置。例如:for iphone, 在nav controller里,你有main view, sub view and sub sub view,前2个都只能打竖,而sub sub view是用来播放video,能够打横打竖。那么在ios 4 and 5里能够经过在main view and sub view的shouldAutorotateToInterfaceOrientation里设置只能打竖,而在sub sub view的shouldAutorotateToInterfaceOrientation设置打竖打横便可。而在ios 6里则没法实现这种效果,由于在main view, sub view and sub sub view的orientation设置是无效的,只可以在nav controller里设置。那么你可能想着用下列代码在nav controller里控制哪一个view打竖,哪一个view打横
目前想到的解决方法只能是把sub sub view脱离nav controller,以modal view方式来显示。这样就能够在modal view里设置打横打竖,而在nav controller里设置只打竖。
* 说了那么多,其实若是你的app的全部view的orientation的设置是统一的,那么你能够简单的在plist file里设置便可,不用添加上面的代码。而若是你添加了上面的代码,就会覆盖plist里orientation的设置。
* in iOS 6, 当view controller present时,不会call willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration:, and didRotateFromInterfaceOrientation: methods,只有在发生rotate的时候才会call