(转)iOS 6的Rotation--详细版本
iOS 6的rotation改变了很多。先来看看官方的描述 http://www.bgr.com/2012/08/06/ios-6-beta-4-change-log-now-available/
知识点:
*UIViewController的shouldAutorotateToInterfaceOrientation方法被deprecated。在ios6里,是使用supportedInterfaceOrientations and shouldAutorotate 2个方法来代替shouldAutorotateToInterfaceOrientation。注意:为了向后兼容iOS 4 and 5,还是需要在你的app里保留shouldAutorotateToInterfaceOrientation。
for ios 4 and 5, 如果没有重写shouldAutorotateToInterfaceOrientation,那么对于iphone来讲,by default是只支持portrait,不能旋转。
for ios 6, 如果没有重写shouldAutorotate and supportedInterfaceOrientations,by default, iphone则是"可以旋转,支持非upside down的方向",而ipad是"可以选择,支持所有方向"
example 1: for ios 4 and 5, iphone device, 若要"可以旋转,支持非upside down的方向",则可以在view controller里
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
- return (interfaceOrientation != UIDeviceOrientationPortraitUpsideDown);
- }
example 2: for ios 6, iphone device, 若要“不能旋转,只支持portait",则可以在view controller里
- - (BOOL)shouldAutorotate
- {
- return NO;
- }
example 3: for ios 6, ipad device, 若要“可以旋转,只支持landscape",则可以在view controller里
- -(NSUInteger)supportedInterfaceOrientations{
- return UIInterfaceOrientationMaskLandscape;
- }
- - (BOOL)shouldAutorotate
- {
- return YES;
- }
* 在iOS 4 and 5,都是由具体的view controller来决定对应的view的orientation设置。而在iOS 6,则是由top-most controller来决定view的orientation设置。
举个例子:你的app的rootViewController是navigation controller "nav", 在”nav"里的stack依次是:main view -> sub view > sub sub view,而main view里有一个button会present modal view "modal view".
那么for ios 4 and 5,在ipad里,如果你要上述view都仅支持横屏orientation,你需要在上面的main view, sub view, sub sub view, model view里都添加
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
- return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation==UIInterfaceOrientationLandscapeRight);
- }
而对于iOS6, 由于是由top-most controller来设置orientation,因此你在main view, sub view, sub sub view里添加下面的代码是没有任何效果的,而应该是在nav controller里添加下列代码。而modal view则不是在nav container里,因此你也需要在modal view里也添加下列代码。
- -(NSUInteger)supportedInterfaceOrientations{
- return UIInterfaceOrientationMaskLandscape;
- }
- - (BOOL)shouldAutorotate
- {
- return YES;
- }
注意:
*你需要自定义一个UINavigationController的子类for "nav controller",这样才可以添加上述代码。
* 和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打横
- -(NSUInteger)supportedInterfaceOrientations{
- if([[self topViewController] isKindOfClass:[SubSubView class]])
- return UIInterfaceOrientationMaskAllButUpsideDown;
- else
- return UIInterfaceOrientationMaskPortrait;
- }
是的,这样可以使得在main view and sub view里无法打横,而sub sub view横竖都行。但问题来了,如果在sub sub view时打横,然后back to sub view,那么sub 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
出处:http://blog.csdn.net/totogogo/article/details/8002173
转载于:https://www.cnblogs.com/goodleixiao/archive/2012/12/19/2824597.html
(转)iOS 6的Rotation--详细版本相关推荐
- iOS开发内购详细版本说明
转自:http://www.jianshu.com/p/c252b2ccb078 一.最近公司很多的项目用到了内购,抽空整理下内购的详细内容吧. 1.先从内购的iTunesConnect里配置说起吧, ...
- 苹果状态栏HTML,webview内嵌的html页面,在ios系统上12以上版本和12以下版本状态栏效果不一样...
详细问题描述 (DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题) [内容] 重现步骤 在vue ...
- 计算机二级公共基础知识总结百度云,计算机二级公共基础知识总结详细版本[精]...
计算机二级公共基础知识总结详细版本[精] (15页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 全国计算机等级考试二级公共基础知识总结第一 ...
- IOS的Alamofire5.4高版本上传图片
IOS的Alamofire5.4高版本上传图片 Alamofire框架上传图片是比较冷门的知识.经常性报错,也找不到相关解释,或者其他低版本的写法,令开发者很是头疼.低版本的写法,在5.4.4API已 ...
- 微软开源 Outlook for iOS 暗黑模式解决方案:支持 iOS 11 及更高版本
微软于 2019 年 8 月推出了面向 Outlook 的暗黑模式,并于去年初开始对该应用程序展开更广泛的重新设计.在新增的外观和功能中,就包括大家期待已久的暗黑模式.现在,软件巨头已决定将其开源,并 ...
- iOS 6的Rotation
from:http://blog.csdn.net/totogogo/article/details/8002173 iOS 6的rotation改变了很多.先来看看官方的描述 http://www ...
- iOS 16 Beta如何降级iOS 15系统?详细图文教程!
你的iPhone升级到iOS 16 Beta版了吗?最近,不少用户表示升级后遇到了许多问题,想要从iOS 16 Beta降级到iOS 15. 今天,小编就来给大家分享一个iOS 16 Beta完美降级 ...
- Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题。
Java实现根据Word模板填充表格数据(poi方式),以及doc和docx转PDF,最全最详细版本,解决外部引用jar在linux上报ClassNotFound的问题. 适用场景: 1.固定格式的W ...
- 苹果微信更新不了最新版本_苹果iOS用户更新微信至版本7.0.13,可以进行微信号修改支持一年修改一次...
今日,微信官方表示,苹果iOS用户更新微信至版本7.0.13,可以进行微信号修改支持一年修改一次,入口位于"我"-"个人信息"-"微信号", ...
最新文章
- Python基础06-数据类型:元组tuple
- html 文字不可选择,有没有办法在HTML页面上使文本无法选择?
- JSF框架在NetBeans下的编码
- yii2中的事件和行为
- 适用于 deno 的多版本管理工具 dvm 发布
- 数据加密类型及创建和申请CA证书
- 第四章:Java_面向对象编程(二)
- react 引入html文件_React最快速上手教程
- Codeforces Round #260 (Div. 1) 	A - Boredom DP
- Mysql优化(出自官方文档) - 第七篇
- Normal Equation----machine learning
- HDR高动态范围图像处理算法
- 使用Cytoscape-BiNGO 对非模式生物做go富集
- android控件属性大全
- fastai v1环境搭建:Win10 MX250 CUDA10.1 cuDNN Pytorch1.0.0 Fastai v1安(bi)装(keng)指南
- 基于强化学习的中间商赚差价指导手册
- oracle数据库卷管理,AIX系统逻辑卷管理
- 线上抓娃娃机火了三个月了,你玩了吗?
- 联想Y50耳机插入耳机孔后没有声音解决办法
- 为什么国企要加快推进数字化转型?
热门文章
- NIO核心之Channel,Buffer和Selector简介
- C语言再学习 -- 详解C++/C 面试题 1
- 逻辑回归的总结(详细步骤)
- Java数据类型转换(自动转换和强制转换)
- 从涂鸦到发布 —— 理解API的设计过程
- dvd清洗碟效果好吗_用什么清洗抽油烟机效果比较好?有哪些注意事项?
- localdatetime转化为date_为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?
- 取两个数较小值c语言_编程代码:用C语言来实现下雪效果,这个冬天,雪花很美...
- 思科模拟器32位_三款另类的68k Mac模拟器
- 最短路径问题(Floyd算法)