博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIWindow 详解
阅读量:6808 次
发布时间:2019-06-26

本文共 3011 字,大约阅读时间需要 10 分钟。

UIWindow对象是所有UIView的根视图,管理和协调的应用程序的显示、分发事件给View。UIWindow类是UIView的子类,可以看作是特殊的UIView。一般应用程序只有一个UIWindow对象,即使有多个UIWindow对象,也只有一个UIWindow可以接受到用户的触屏事件。UIWindow初始化在appDeleDgate里面的 didFinishLaunchingWithOptions方法。

第一、UIWindow的创建

iPhone应用程序通常只有一个UIWindow类的实例,该实例的创建如果是从nib文件创建,则通常有个属性变量,如果是用代码创建,则必须在创建时传入屏幕矩形,屏幕矩形可以通过UIScreen对象来取得,具体代码如下所示:

 

self.window = [[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]] autorelease];

第二、UIWindow的作用:

1.UIWindow作为一个容器,盛放所有的UIView

2.UIWindow会把其他其他所有消息传递给view

第三、常用的加载view的方法

 

1、addSubview

直接将view通过addSubview方式添加到window中,程序负责维护view的生命周期以及刷新,但是并不会为去理会view对应的ViewController,因此采用这种方法将view添加到window以后,我们还要保持view对应的ViewController的有效性,不能过早释放。

sample:

 

self.switchController=[[SwithcViewController alloc] initWithNibName:@"switchView" bundle:nil];    UIView *switchView=self.switchController.view;    CGRect switchViewFrame=switchView.frame;    switchViewFrame.origin.y+=[UIApplication sharedApplication].statusBarFrame.size.height;    switchView.frame=switchViewFrame;    [self.window addSubview:switchView];

2、rootViewController

 

sample:

 

self.viewController = [[[AndyViewController alloc] initWithNibName:@"AndyViewController" bundle:nil] autorelease];    self.window.rootViewController = self.viewController;

把创建的viewcontrolle付给rootViewController,,UIWindow将会自动将其view添加到当前window中,同时负责ViewController和view的生命周期的维护,防止其过早释放.

 

官方解释:

 

rootViewController

The root view controller for the window.

@property(nonatomic, retain) UIViewController *rootViewController

Discussion

The root view controller provides the content view of the window. Assigning a view controller to this property (either programmatically or using Interface Builder) installs the view controller’s view as the content view of the window. If the window has an existing view hierarchy, the old views are removed before the new ones are installed.

The default value of this property is nil.

 第四、常用属性分析:

 

1、windowLevel

 

UIWindow有三个层级,分别是Normal,StatusBar,Alert,如下所示:

 

UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;

UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;

UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar;

打印输出他们三个这三个层级的值我们发现从左到右依次是0,1000,2000,也就是说Normal级别是最低的,StatusBar处于中等水平,Alert级别最高。而通常我们的程序的界面都是处于Normal这个级别上的,系统顶部的状态栏应该是处于StatusBar级别,UIActionSheet和UIAlertView这些通常都是用来中断正常流程,提醒用户等操作,因此位于Alert级别。

根据window显示级别优先的原则,级别高的会显示在上面,级别低的在下面,我们程序正常显示的view位于最底层,

官方解释:

The receiver’s window level.

@property(nonatomic) UIWindowLevel windowLevel

Discussion

Levels are ordered so that each level groups windows within it in front of those in all preceding groups. For example, alert windows appear in front of all normal-level windows. When a window enters a new level, it’s ordered in front of all its peers in that 

2.keyWindow

是唯一一个可以接受响应的Window,在一个应用程序中只有唯一一个keyWindow

官方解释:

 

The key window is the one that is designated to receive keyboard and other non-touch related events. Only one window at a time may be the key window.

常用一下四个方法来操作

 

  • – makeKeyAndVisible
  • – becomeKeyWindow
  • – makeKeyWindow
  • – resignKeyWindow

 

转载地址:http://bitwl.baihongyu.com/

你可能感兴趣的文章
我的实用设计模式之关于Policy-based design
查看>>
对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(3)
查看>>
你所不知到的C++ 系列
查看>>
Js字符串与十六进制的相互转换 【转】
查看>>
美河LINUX 内核学习视频
查看>>
ODBC错误处理
查看>>
Eclipse Java注释模板设置详解以及版权声明
查看>>
ios根据文本自适应 然后 搭建类似如下效果
查看>>
TransactionScope只要一个操作失败,它会自动回滚,Complete表示事务完成
查看>>
artDialog双击会关闭对话框的修改
查看>>
One-hot 编码/TF-IDF 值来提取特征,LAD/梯度下降法(Gradient Descent),Sigmoid
查看>>
【转】VMware Fusion Professional 10 序列号
查看>>
java结合js获取验证码
查看>>
Web Scalability for Startup Engineers Tip&Techniques for Scaling You Web Application --读书笔记
查看>>
ETW参考资源
查看>>
输入法弹出,屏幕自动适应
查看>>
sql2005镜像实现
查看>>
Android学习小Demo(19)利用Loader来实时接收短信
查看>>
MFC框架程序解析
查看>>
Android Studio Prettify 插件
查看>>