屏幕旋转,我的理解是ios设备根据重力感应改变屏幕的方向。那么如何在屏幕转动后变换UI?或则保持原样呢?

ios设备支持4个方向,UIInterfaceOrientationPortrait,UIInterfaceOrientationPortraitUpsideDown,UIInterfaceOrientationLandscapeLeft

UIInterfaceOrientationLandscapeRight。

设置屏幕旋转支持方向的方法有2个

1. 在xcode中选择相应的项目,然后在右边设置页面中选择General,最后在Device Orientation可以选择支持的旋转方向,如下图

2. 另一个方法

IOS 6.0以上

当设备发生旋转时会调用主window的rootViewController或最顶层的ViewController的shouldAutorotate询问是否可以自动旋转,当允许旋转后会再调用supportedInterfaceOrientation。

UIViewController * _controller = [[UIViewController alloc] init];
CustomNav * _nav = [[CustomNav alloc] initWithRootViewController:_controller];
[self.window setRootViewController:_nav];
@implementation CustomNav : UINavigationController
- (BOOL)shouldAutorotate
{return [self.topViewController shouldAutorotate];
}- (NSUInteger)supportedInterfaceOrientations
{return [self.topViewController supportedInterfaceOrientations];
}
@end

如果想让某几个页面不转动或只支持特定的方向转动可以重写响应UIViewController的shouldAutoroate和supportedInterfaceOrientations方法

IOS 6.0 以下,需重写shouldAutorotateToInterfaceOrientation:UIInterfaceOrientation

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
{if ( toInterfaceOrientation == UIDeviceOrientationPortrait ) {return YES;} else {return NO;}
}

2种方法可以结合使用,但supportedInterfaceOrientations返回值必须要包含object中设置的值,否则会引起crash。

另外如果将UINavigationController做为rootViewController,在pop时会重新调用shouldAutoroate和supportedInterfaceOrientations,小伙伴们看看是否可以利用一下。

还可以通过监听的方式来获知屏幕旋转,但不能控制旋转。

首先必须设置window的rootViewController,否则无法监听到屏幕旋转的消息

[self.window setRootViewController:_nav];[self.window addSubview:_nav.view];[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(receiverNotification)name:UIDeviceOrientationDidChangeNotificationobject:nil];

当然还可以使用transform的方式来直接旋转UIVIew或window, 但我认为这些并不算屏幕旋转的范畴,可以在以后讨论动画的时候再说。

ios屏幕的旋转,Device Orientation相关推荐

  1. 关于IOS屏幕的旋转问题

    处理IPhone屏幕的旋转是我们经常遇到的,当你做一个应用既然满足竖屏又要满足横屏,这就要求我们会处理屏幕旋转的问题! 方法一:自动布局 1.将项目中界面的四种手持方式都点上: 2.取消Use Aut ...

  2. iOS屏幕自动旋转 以及横屏模式打开APP出现的问题

    首先  项目配置 设置支持方向 创建 UINavigationController父类. tabbar  父类 . uiviewcontroller 父类 UINavigationController ...

  3. iOS屏幕旋转 浅析

    一.两种orientation 了解屏幕旋转首先需要区分两种orientation 1.device orientation 设备的物理方向,由类型UIDeviceOrientation表示,当前设备 ...

  4. iOS屏幕旋转及其基本适配方法

    屏幕旋转示例.jpeg 前段时间抽空总结了一下iOS视频播放的基本用法,发现这其中还有一个我们无法绕过的问题,那就是播放界面的旋转与适配.的确,视频播放与游戏类型的App经常会遇到这个的问题.由于至今 ...

  5. iOS屏幕旋转那些事

    前些日子处理了一些关于页面中的屏幕旋转的事情,需要根据某个页面的不同旋转方向去做不同的处理,现在再次总结一下,以在心里有个系统的体系,也可以当成工具文章查询. 首先来看第一个方法: [UIDevice ...

  6. iOS 屏幕旋转问题总结

    1.两个Orientation 1.1设备的物理方向(UIDeviceOrientation) typedef NS_ENUM(NSInteger, UIDeviceOrientation) {UID ...

  7. ios屏幕旋转学习笔记

    加速计是整个IOS屏幕旋转的基础,依赖加速计,设备才可以判断出当前的设备方向,IOS系统共定义了以下七种设备方向: typedef NS_ENUM(NSInteger, UIDeviceOrienta ...

  8. iOS屏幕旋转技术点及解决方案总结

    1.屏幕旋转相关枚举 关于屏幕旋转枚举一共有3种: UIInterfaceOrientation,    UIInterfaceOrientationMask,   UIDeviceOrientati ...

  9. iOS的push方法推出控制器界面中单个屏幕的旋转问题

    前言 相信很多人都遇到屏幕旋转的的问题,尤其push方法推出控制器的view的时候,很遇到很多的问题,我之前遇到问题就是很坑的问题,连续反复push方法.pop方法推出和退出需要横屏控制器的显示的时候 ...

最新文章

  1. 正则:匹配一个汉字姓名
  2. 拉格朗日乘数法的原理,我用10幅图把它讲清楚了
  3. 5、Dcoker 容器数据卷用-v命令添加
  4. 参数cluster_interconnect详细介绍
  5. 解决pycharm安装包过程出现的问题:module 'pip' has no attribute 'main'
  6. phpMyAdmin - Error
  7. springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls
  8. c语言判断字符是汉字,c语言里面判断字符是否为汉字
  9. PHP选项、信息函数(转)
  10. Python编程基础14:数据库编程
  11. 贝叶斯信念网络Bayes Belief network
  12. java 解析xml文件案例
  13. 基于FPGA ZC706的AD9371ADRV9009网口驱动配置
  14. 第一节 计算机硬件组成
  15. AVX AVX2 To enable them in other operations
  16. TwinCAT 3 file记录日志txt文件程序
  17. Pubg九月十六日服务器维护,绝地求生9月16日停机更新公告:绝地求生几点开始停机维护...
  18. DBLP数据集用weka数据挖掘 xml转csv格式文件
  19. PDF如何裁剪页面,PDF裁剪页面的方法
  20. AE2022 for Mac安装包+安装教程

热门文章

  1. 微信分享与支付开发详解
  2. 全国计算机等级考试 和ccf,【我与CCF】我与CCF的不解之缘
  3. 关于阿里巴巴开发手册不得使用外键与级联,一切外键概念必须在应用层解决的疑惑
  4. 通过youtube上传视频赚钱并免费宣传你的业务
  5. 网迅wx1860网卡原理图驱动
  6. 图表美化设置圆角——《超级处理器》应用
  7. React+dva多图片上传
  8. 给idea设置注释(超便捷)
  9. 索引是什么,如何实现?
  10. MySQL 的三个自问自答