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

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 自动旋转的实现

时间: 2024-10-27 11:03:58

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

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

这里主要解析 UIAlertView 的几个关键功能的实现: 随着设备屏幕的旋转而旋转: Alert弹出框,使用UIWindow来实现,就是说,不用依赖于当前显示在最前面的UIView. 实现源码参考: http://git.oschina.net/shede333/BMAlertHud 使用UIWindow 弹出一个Alert框,最好新建一个 UIWIndow, 把window.windowLevel = UIWindowLevelAlert,这样就能显示在最前面: 调用[window mak

设置Windows 8.1屏幕自动旋转代码, Auto-rotate function code

程序代码实现启用或禁用Windows 8.1 Tablet的自动旋转功能 方法一:使用SetDisplayAutoRotationPreferences函数功能 #include <Windows.h> /* typedef enum ORIENTATION_PREFERENCE { ORIENTATION_PREFERENCE_NONE = 0x0, ORIENTATION_PREFERENCE_LANDSCAPE = 0x1, ORIENTATION_PREFERENCE_PORTRAIT

IOS系统自带社交分享

很多APP中都带有社交分享功能,通过用户的分享,让更多地人去了解和使用这个APP,目前社交分享是移动互联网应用程序推广的最重要手段之一,国内较或的分享平台有微信,IOS6后苹果集成的新浪微博,还有IOS7后集成的腾讯微博. 在IOS中,实现社交分享可以自己编写各个平台的分享代码,但代码量较多,也可以利用IOS自带的Social.framework,更可以利用第三方的分享框架,如友盟,ShareSDK等.接下来先介绍一个系统自带的分享功能. 打开设备或模拟器的偏好设置,可以看到如下 系统需要先登录

ios 系统自带的菊花简单使用教程

//等待登陆菊花初始化:UIActivityIndicatorView *ActivityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; //设置菊花的中心点,貌似不能设置菊花的大小,系统自带的有三种样式 ActivityIndicator.center = CGPointMake(100, 100); //添加菊花 [se

社交网络编程API之iOS系统自带分享

社交网络编程API 社交网络编程主要使用iOS提供的Social框架,目前Social框架主要包含两个类: SLComposeViewController 提供撰写社交信息(如微博信息)的视图控制器,有iOS系统提供UI,就是写入要分享内容的小弹出框. SLRequest封装了HTTP请求,提供了同一的请求社交网络服务的接口,能够直接与社交网路服务通信的能力,没有UI需要自己编写设计. 除了Social框架外,还有可能用到UIActivityViewControlelr和ACAccount.UI

屏幕自动旋转和调节大小

1.新建工程名为RotateDemo , File->New->Project ->single View Application -> next 2.在view视图上添加两个Label, [cpp] view plain copy //  RotateViewController.h #import <UIKit/UIKit.h> @interface RotateViewController : UIViewController { UILabel *upLabel

iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法

http://www.tuicool.com/articles/IfEZre 今天写demo的时候发现, 如果把通过相机获取到的图片,直接进行操作, 比如裁剪, 缩放, 则会把原图片向又旋转90度. 刚开始觉得莫名其妙, 不知所措. 后来百度了一下,找到了解决办法. ps: 查找过程中, 碰到了一种说法: //get original photo from iOS photos //如果该图片大于2M,会自动旋转90度:否则不旋转 UIImage* originalImg=[dict objec

iOS 系统自带JSON解析,NSJSONReadingOptions参数解读

开发中,我们经常需要解析JSON数据,系统提供的 [NSJSONSerialization JSONObjectWithData:[objc dataUsingEncoding:NSUTF8StringEncoding] options:(NSJSONReadingAllowFragments) error:&error]解析方法,需要填写一个NSJSONReadingOptions参数 首先用代码来说明NSJSONReadingMutableContainers的作用: NSString *s

ios 系统自带的菊花(UIActivityIndicatorView)指示器

// //  RootViewController.m //  UIActivityIndicatorViewDemo // //  Created by Dubai on 15/4/28. //  Copyright (c) 2015年 Dubai. All rights reserved. // #import "RootViewController.h" @interface RootViewController () @property (strong, nonatomic)