iOS学习之UI初级————UIWindow

浅谈编者对UIWindow的认识与理解



Window在手机屏幕上界面上提供了一个区域来显示APP的界面视图View,也将APP中的事件分发给View。一个应用程序通常情况下只有一个Window。


可以通过UIApplication获取当前的keyWindow,keyWindow是用来管理键盘以及非触摸类的消息,并且只能有一个window是keyWindow。


UIWindow有三个级别,对应三种显示优先级。通过windowLevel设置:

UIWindowLevelAlert > UIWindowLevelStatusBar > UIWindowLevelNormal


一个iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了,就是说没有UIWindow,就看不到任何UI界面。


UIWindow对象的责任:1:包含了应用程序的可视化内容。2:为视图和其它应用程序对象在触摸事件中提供了关键的作用。3:它与视图控制器一起协作来呈现数据。


解释下UIWindow与UIView的关系,UIWindow是UIView的子类,都间接继承于NSObject,UIWindow对象又是UIView的根视图,管理和协调应用程序的显示,分发事件给View。另外NSObject子类详细关系图如下:iOS学习之UI初级————UIWindow_第1张图片


UIWindow的简单使用

1:代码创建(在AppDelegate.m中创建的情况)

//创建一个window

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

//添加背景颜色

self.window.backgroundColor = [UIColor whiteColor];

//创建一个视图控制器作为window的根视图控制器

self.window.rootViewController = [[UIViewController alloc] init];

//让window成为主window并且显示window,此方法能实现信息显示在屏幕上

[self.window makeKeyAndVisible];


在此提供一张关系图


iOS学习之UI初级————UIWindow_第2张图片


应用程序启动之后,先创建Application,再创建它的代理,之后创建UIWindow,UIWindow继承自UIView。


2:在storyboard中UIWindow也是被创建的,同时创建了相应的控制器,只不过创建过程被屏蔽了,其过程是当用户点击程序图标的时候,先执行main函数,执行UIApplicationMain(),根据参数创建Application,创建代理,并把代理设置给application(info.plist里面的storyboard的name,根据这个name找到对应的storyboard),开启一个事件循环,当程序加载完毕,会调用代理的didFinishLaunchingWithOptions:方法,在调用此方法之前回家再storyboard,加载时创建一个Window,接下来创建箭头所指向的控制器,把该控制器设置为UIWindow的根控制器,最后将window显示出来。






本文只是编者自己对UIWindow的认识与理解,如有误请指正。


你可能感兴趣的:(移动应用,ios开发)