Window
用户界面的背景并且分发事件到UIView对象
概述
windows同view controller一起处理消息并且执行用户操作的相关任务。UIKit处理很多页面相关的操作,结合其他对象实现应用行为。
当需要做如下工作的时候使用window:
提供一个主window显示应用内容
创建额外的window显示额外的内容
一般来说,xcode提供应用主window。新版iOS项目使用storyboard定义应用界面。storyboard需要一个window属性,配置在xcode默认提供的app delegate对象上。如果你的应用不用storyboard,那么需要自己创建一个。
大多数应用需要一个window用于在设备的主屏幕上显示应用内容。 虽然你能创建其他的window在设备主屏幕上,额外的window通常用于在其他屏幕上显示内容。
你也可以用UIWindow对象处理其他任务:
设置window的z轴,影响相对于其他window的遮挡层级关系
显示window并且获取键盘焦点
window坐标转换
改变window的root view controller
改变显示window的screen
window自身无法显示,但是window通过window的root view controller控制view。在storyboard中配置root view controller,给你的接口增加适当的view。
很少需要创建UIWindow子类。需要通过window实现的一些操作一般来说是用view controller来实现会更容易一些。偶尔可能想重写becomeKey或者resignKey方法来实现自定义的行为以处理window按键状态变化。
理解按键交互
由于触摸事件分发window,内容包括发生的位置。不包含坐标信息的事件发送到key windows。同一时间只有一个window是key window,可以使用window的isKeyWindow属性来判断他的状态,大部分时间,主window是key window,但是UIKit可能指定一个不同window。
如果需要知道哪个window是key window可以监听didBecomeKeyNotification和didResignKeyNotification通知。当key window发生改变的时候系统发出通知。调用类方法可以强制设置window为key window。
Last updated
Was this helpful?