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

前言

最近有个需求,是在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开发者们能有一定的帮助,亲身试验的东西才是硬道理,如果有疑问大家可以留言交流。

(0)

相关推荐

  • IOS 七种手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)详解及实例代码

    IOS 七种手势操作 今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: 1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作. UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer

  • IOS手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)

    下面通过图文并茂的方式给大家分享下IOS手势操作(拖动.捏合.旋转.点按.长按.轻扫.自定义)的相关内容. 1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作. UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer(捏合) UIRotatio

  • iOS拍照后图片自动旋转90度的完美解决方法

    今天开发一个拍照获取照片的功能的时候, 发现上传之后图片会自动旋转90. 测试发现, 只要是图片大于2M, 系统就会自动翻转照片 相机拍照后直接取出来的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的imageOrientation属性是3,即UIImageOrientationRight.如果这个图片直接使用则没事,但是如果对它进行裁剪.缩放等操作后,它的这个imageOrientation属性会变成0.此时这张图片用在别的地方就会发生

  • Swift实现无限轮播效果

    从今天开始,我学习的重点开始转向Swift,并且会分享一些自己学习的心得体会,今天给大家带来的的是无限轮播.广告页的无限轮播是非常常见的一个功能,大多数APP都有,大多数程序员也都实现过,今天我们用Swift实现一下.项目地址 图片切换我们可以选择的基本控件有两个UIScrollView 和 UICollectionView,这次我们选择UICollectionView:既然是轮播,就会用到Timer.所以,我们这次主要应用的知识点为UICollectionView 和 Timer: impor

  • iOS开发中使用屏幕旋转功能的相关方法

    加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向:   复制代码 代码如下: typedef NS_ENUM(NSInteger, UIDeviceOrientation) { UIDeviceOrientationUnknown, UIDeviceOrientationPortrait,            // Device oriented vertically, home button on the bottom UIDe

  • 总结iOS App开发中控制屏幕旋转的几种方式

    在iOS6之前的版本中,通常使用 shouldAutorotateToInterfaceOrientation 来单独控制某个UIViewController的方向,需要哪个viewController支持旋转,只需要重写shouldAutorotateToInterfaceOrientation方法. 但是iOS 6里屏幕旋转改变了很多,之前的 shouldAutorotateToInterfaceOrientation 被列为 DEPRECATED 方法,查看UIViewController

  • iOS手势识别的详细使用方法(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. 1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了UIGestureRecognizer类.手势识别UIGestureRecognizer类是个抽象类,下面的子类是具体的手势,开发这可以直接使用这些手势识别. UITapGestureRecognizer UI

  • 详解利用exif.js解决ios手机上传竖拍照片旋转90度问题

    HTML5+canvas进行移动端手机照片上传时,发现iOS手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正. 利用exif.js读取照片的拍摄信息,这里主要用到Orientation属性. Orientation属性说明如下: 下面就直接上代码了. 主要有html5页面和一个js,示例功能包含了图片压缩和旋转. 自己写的是uploadImage.js. html5测试页面

  • iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer

    iOS渐变圆环旋转动画CAShapeLayer CAGradientLayer shape.gif demo.png - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. CALayer *layer = [CALayer layer]; layer.backgroundColor = [UIColor redColor

  • iOS开发中控制屏幕旋转的编写方法小结

    在iOS5.1 和 之前的版本中, 我们通常利用 shouldAutorotateToInterfaceOrientation: 来单独控制某个UIViewController的旋屏方向支持,比如: 复制代码 代码如下: - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  {      return (interfaceOrientation == UIInter

随机推荐