关于iOS屏幕旋转的一些注意事项

所属分类: 软件编程 / IOS 阅读数: 1782
收藏 0 赞 0 分享

前言

最近有个需求,是在App中有一个查看文件的页面,由于查看文件横屏会更方便阅读,所以boss说要让这个页面可以横屏。之前都没有接触过横屏的具体实现方法,一开始走了不少弯路,而且各种bug。在这里把遇到的问题分享一下,希望对大家有点帮助。

要让你的APP支持旋转,你需要进行如下几个步骤

1、 全局配置

在工程->TARGETS->General->Deployment Info中配置


在AppDelegate中配置

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{
 return UIInterfaceOrientationMaskAllButUpsideDown;
}

2、 全局配置做好了,你就可以在控制器中实现相应的旋转方法来让你的APP支持旋转了

我们需要在什么地方实现控制器的旋转方法呢?

有以下两种情况

1、当前控制器是window的rootViewController由rootViewController来管理旋转的相关方法

典型的有 UINavigationController、UITableBarController

2、当前控制器是modal模式的时(控制器为modal显示的控制器),由该控制器自己管理旋转的相关方法

即控制器是通过 presentViewController:animated:completion: 方式出来的

控制器的旋转方法介绍

控制器的旋转方法在iOS6之前和之后有了比较大的变化

1、在iOS6 之前只需要实现下面这个方法就可以

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
}

2、在iOS6之后由下面两个方法替代

//是否支持旋转
- (BOOL)shouldAutorotate {
 return YES; 
}
//所支持的方法集合,是一个枚举类
- (NSUInteger)supportedInterfaceOrientations {
 return UIInterfaceOrientationMaskLandscape; 
}

下面我重点讲一下在iOS6之后旋转方法的使用情况。因为在iOS6+、7、8中和iOS9中这两个方法的调用顺序以及处理逻辑是不一样的(坑)

控制器的旋转方法使用

1、iOS6+、7、8中会先调用shouldAutorotate判断屏幕是否支持旋转

  1. 该方法返回YES,就会去调用supportedInterfaceOrientations检查控制器支持的方向枚举集合,如果存在符合设备所处的方向枚举集合,屏幕会执行相应的旋转,如果不存在设备所处的方向枚举,屏幕就不会旋转,停止检查
  2. 该方法返回NO,屏幕不能够旋转,停止检查

2、iOS9+中会先调用supportedInterfaceOrientations来检查控制器支持的方向枚举集合

  1. 如果方向枚举集合中没有符合设备所处的方向枚举,就不会去调用shouldAutorotate方法,屏幕不会旋转,停止检查
  2. 如果方向枚举集合中有符合设备所处的方向枚举,那么就会去调用shouldAutorotate方法

             如果该返回YES,屏幕执行相应的旋转

             如果该返回NO,屏幕不会旋转,停止检查

3、关于preferredInterfaceOrientationForPresentation方法,该方法的作用是返回最优先显示的屏幕方向。在iOS7之后就不会调用了,但是网上说在iOS7之前需要加上,不加会崩溃(没有亲测)

写这边文章主要是因为之前在网上看了很多资料,但是并有提到旋转方法他们的调用顺序以及处理逻辑的介绍,大部分都是抄来抄去,没有经过自己试验的代码也贴到网上来,坑了我千万遍。

以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能有一定的帮助,亲身试验的东西才是硬道理,如果有疑问大家可以留言交流。

更多精彩内容其他人还在看

IOS开发相册图片多选和删除的功能

之前小编有和大家分享过一篇关于从相册选取单张照片的文章,那么下面这篇文章跟大家分享下如何相册多图选择和删除,以及包括拍照功能,有需要的可以参考学习,下面来一起看看吧。
收藏 0 赞 0 分享

iOS使用runtime修改文本框(TextField)的占位文字颜色

相信大家都知道TextField默认的占位颜色也是深灰色,这个颜色比较难看清,这篇文章给大家介绍如何使用runtime修改TextField文本框的占位文字颜色,有需要的可以参考借鉴.
收藏 0 赞 0 分享

iOS实现点击状态栏自动回到顶部效果详解

在IOS开发过程中,经常会有这种需求,需要通过点击状态栏返回到顶部,给用户更好的体验效果,下面这篇文章给大家详细介绍了实现过程,有需要的可以参考借鉴。
收藏 0 赞 0 分享

IOS上iframe的滚动条失效的解决办法

这篇文章主要为大家详细介绍了IOS上iframe的滚动条失效的解决办法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

IOS面试大全之常见算法

之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和分类,这篇文章先给大家分享一下IOS中的常见算法,有需要的可以参考借鉴。
收藏 0 赞 0 分享

IOS判断字符串是否有空格实例

在我们大家日常开发的时候,经常会需要对注册,登录,忘记密码等功能的密码进行判断是否包含空格,下面这篇文章给大家分享了自己封装的一个方法,有需要的可以参考借鉴。
收藏 0 赞 0 分享

IOS设置按钮为圆角的示例代码

这篇文章给大家分享了IOS按钮设置为圆角的方法,按钮的四个角都可随意设置为圆角,对大家开发IOS具有一定的参考借鉴价值。有需要的朋友们可以参考借鉴。
收藏 0 赞 0 分享

IOS绘制虚线的方法总结

这篇文章给大家分享了iOS中绘制虚线常见的几种方式,大家可以根据自己的需求进行选择哪种方法,下面跟着小编来一起看看吧。
收藏 0 赞 0 分享

React Native搭建iOS开发环境

React Native的门槛不管是对于前端开发者还是移动端开发者来说都是很高的,既要懂原生又要懂js,技术栈是相当长的。但是没有关系,下面我们一步步来学习,慢慢成长吧!
收藏 0 赞 0 分享

IOS轻松几步实现自定义转场动画

这篇文章将讲述几个步骤实现转场动画的自定义方式,并且给出了示例代码,毕竟代码才是我们的语言,这样比较容易上手。下面来一起看看吧。
收藏 0 赞 0 分享
查看更多