文档章节

iOS系统自带的 **UIAlertView** 以及 屏幕自动旋转的实现

shede333
 shede333
发布于 2015/05/21 10:52
字数 822
阅读 1609
收藏 3

#iOS系统自带的 UIAlertView 自动旋转的实现

这里主要解析 UIAlertView 的几个关键功能的实现:

  • 随着设备屏幕的旋转而旋转;
  • Alert弹出框,使用UIWindow来实现,就是说,不用依赖于当前显示在最前面的UIView。

实现源码参考: http://git.oschina.net/shede333/BMAlertHud

###使用UIWindow

弹出一个Alert框,最好新建一个 UIWIndow

  • 把window.windowLevel = UIWindowLevelAlert,这样就能显示在最前面;
  • 调用[window makeKeyAndVisible],该window就能显示,
  • 调用[window resignKeyWindow],该window就能消失,转而显示之前的window,
  • 尽量不要直接设置[window addSubview:alertView],直接往window上加UIView,屏幕旋转时会有问题;因为,屏幕旋转时,app会依次调用 key-window -> window.rootViewController,所以,在new一个UIWindow是,最好也给window设置一个rootViewController, 然后把你需要显示的AlertView 贴在rootViewController.view上,这样便于后面处理屏幕旋转问题.

###屏幕旋转实现

这里直说 iOS6 以及更高系统版本的实现; UIViewController两个系统函数

  • - (BOOL)shouldAutorotate :是否支持旋转,默认返回 YES
  • - (NSUInteger)supportedInterfaceOrientations :支持哪几个方向旋转(共4个方向,使用枚举值UIInterfaceOrientationMask来设定);
    只有上面的shouldAutorotate返回YES,这个函数才会被调用; iPad上的默认值为UIInterfaceOrientationMaskAll
    iPhone的默认值为UIInterfaceOrientationMaskAllButUpsideDown

重写以上两个函数,即可实现屏幕的旋转与否。

####屏幕旋转时,控件位置自定义

UIViewController两个系统函数,但在iOS8上被放弃了,主要是实现:屏幕旋转时,子VIew布局位置的更改,这里区分一下:

  • - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    这函数是被放在屏幕旋转动画的 Animation-Block 里,所以,这里对子View做的任何改变,都会动画的实现,屏幕旋转时,要自定义改变子View的位置,就在这里实现。

  • - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    重写这个函数,里面的代码的实现不会动画,建议屏幕旋转时,需要把类似禁止View的触摸事件、停止音乐播放等动作放在此处;


###适配问题

这里要区分iOS6、7 和 iOS8 的区别:

屏幕 Screen的Size : [[UIScreen mainScreen] bounds].size

在iOS6、7 随着屏幕的旋转,Screen的Size,以及相关UIViewController的view的长宽是 不变的,即高 总是大于 宽;
在iOS8上,随着屏幕的旋转,Screen的Size,以及相关UIViewController的view的长宽是 改变的

所以,需要设置AlertView随屏幕的旋转而旋转的话,考虑到适配iOS6、7、8,需要做以下设置:

  • - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 这个函数里实现:屏幕旋转时,设置子View的位置, 注意Screen的Size在ios8上是会改变的。

其实iOS8上对屏幕旋转的支持很好,我们只需要把子view的autoresizingMask设置好,就会达到我们需要的效果;
但是在iOS6、7上,我们队子View的更改,大部分工作都需要在- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 里主动设置子view;

###参考

实现源码参考: http://git.oschina.net/shede333/BMAlertHud #iOS系统自带的 UIAlertView 自动旋转的实现

© 著作权归作者所有

shede333
粉丝 21
博文 24
码字总数 34707
作品 0
海淀
程序员
私信 提问
如何在iOS上实现Android风格的Toast

iOS的风格和Apple其他产品一样,简单而粗暴。没有给人其他选择的余地,让你又爱又恨。同样的,Apple对待iOS平台的开发人员和对待大众消费者一样,也不给你留余地。UIAlertView就是一个鲜明标...

鉴客
2011/11/21
829
0
iOS Simulator功能介绍关于Xamarin IOS开发

iOS Simulator功能介绍关于Xamarin IOS开发 iOS Simulator功能介绍 在图1.38所示的运行效果中,所见到的类似于手机的模型就是iOS Simulator。在没有iPhone或iPad设备时,可以使用iOS Simulat...

大学霸
2015/04/17
0
0
iOS 9.3 正式推送,新增夜间模式、备忘录加密

随着今天凌晨 iPhone SE 的发布,苹果最新的操作系统 iOS 9.3 也同时发布,而且现在已经开始推送。iOS 9.3 是这一代 OS 中功能变动最大的一次更新,带来了早就该有的「夜间暖光模式」和「备忘...

oschina
2016/03/22
4.6K
9
Unity3D 游戏引擎之感应IOS设备旋转与iPhone键盘事件(十六)

Unity3D 游戏引擎之感应IOS设备旋转与iPhone键盘事件 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6993977 iPhone i...

彭博
2012/03/09
348
0
旧工程适配iOS 6和iPhone 5的一些故事

2012-09-29 By dapps  旧工程适配iOS 6和iPhone 5的一些故事抢沙发 分类:iPhone开发 标签:iOS 6、iPhone 5、Retina、适配iOS 6、适配iPhone 5 国内最专业的APP开发者社区,dApps! 苹果每...

Orange1
2012/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redux

Redux概念 Redux = Reducer + Flux,数据层框架,将所有数据都存储到store中 Redux的工作流程 Antd的使用 安装npm install antd --save...

星闪海洋
46分钟前
2
0
OSChina 周一乱弹 —— 你们谁看见了我的诺贝尔奖

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @脚板薯 :这么晚不睡只为找到一首歌,晚安。 ♫Say You Want Me♪ ♫Say You Want Me♪ - Augustana 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
55分钟前
169
14
我为什么要写微信公众号

埋一颗种子,细心呵护,静待她枝繁叶茂,葱郁参天 V2论坛上有个帖子【做程序员最重要的还是一定要有自己的作品】,作者写道: 能有一个作品和你的名字联系在一起,应当成为在职业生涯前期着意...

运维咖啡吧
今天
3
0
数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部