最近有个需求,是在应用程序中有一个查看文件的页面,由于查看文件横屏会更方便阅读,所以老板说要让这个页面可以横屏。之前都没有接触过横屏的具体实现方法,一开始走了不少弯的路,而且各种错误。在这里把遇到的问题分享一下,希望对大家有点帮助。
<>强要让你的应用支持旋转,你需要进行如下几个步骤强>
在工程<代码>→目标→→将军部署信息> 代码中配置
——(UIInterfaceOrientationMask)应用程序:UIApplication(*)应用supportedInterfaceOrientationsForWindow: (ui窗口*)窗口 { 返回UIInterfaceOrientationMaskAllButUpsideDown; }
我们需要在什么地方实现控制器的旋转方法呢?
<强>有以下两种情况强>
1,当前控制器是窗口的rootViewController由rootViewController来管理旋转的相关方法
典型的有UINavigationController, UITableBarController
2,当前控制器是模态模式的时(控制器为模态显示的控制器),由该控制器自己管理旋转的相关方法
即控制器是通过<代码> presentViewController:动画:完成> 代码:方式出来的
<>强控制器的旋转方法介绍强>
控制器的旋转方法在iOS6之前和之后有了比较大的变化
1,在iOS6之前只需要实现下面这个方法就可以
(保龄球)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation { 返回(interfaceOrientation==UIInterfaceOrientationLandscapeLeft | | interfaceOrientation==UIInterfaceOrientationLandscapeRight); }
2,在iOS6之后由下面两个方法替代
//是否支持旋转 (保龄球)shouldAutorotate { 返回YES; }//所支持的方法集合,是一个枚举类 ——(了NSUInteger) supportedInterfaceOrientations { 返回UIInterfaceOrientationMaskLandscape; }
下面我重点讲一下在iOS6之后旋转方法的使用情况。因为在iOS6 + 7 8中和iOS9中这两个方法的调用顺序以及处理逻辑是不一样的(坑)
1 iOS6 + 7 8中会先调用shouldAutorotate判断屏幕是否支持旋转
-
<李>该方法返回是的,就会去调用supportedInterfaceOrientations检查控制器支持的方向枚举集合,如果存在符合设备所处的方向枚举集合,屏幕会执行相应的旋转,如果不存在设备所处的方向枚举,屏幕就不会旋转,停止检查
李> <李>该方法返回不,屏幕不能够旋转,停止检查
李>
2, iOS9 +中会先调用supportedInterfaceOrientations来检查控制器支持的方向枚举集合
-
<李>如果方向枚举集合中没有符合设备所处的方向枚举,就不会去调用shouldAutorotate方法,屏幕不会旋转,停止检查
李> <李>如果方向枚举集合中有符合设备所处的方向枚举,那么就会去调用shouldAutorotate方法
李>
,,,,,,,,,,,,如果该返回是的,屏幕执行相应的旋转
,,,,,,,,,,,,如果该返回不,屏幕不会旋转,停止检查
3,关于preferredInterfaceOrientationForPresentation方法,该方法的作用是返回最优先显示的屏幕方向。在iOS7之后就不会调用了,但是网上说在iOS7之前需要加上,不加会崩溃(没有亲测)
写这边文章主要是因为之前在网上看了很多资料,但是并有提到旋转方法他们的调用顺序以及处理逻辑的介绍,大部分都是抄来抄去,没有经过自己试验的代码也贴到网上来,坑了我千万遍。
以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能有一定的帮助,亲身试验的东西才是硬道理,如果有疑问大家可以留言交流。