接上篇 View编程指南(二)
六、Window能干嘛呢
对于很多应用来说,唯一和window需要交互的地方就是当应用第一次启动的时候,你需要创建一个window : D。其实你还能用window对象来干这些事儿:
- window对象可以用来对点和矩形来进行坐标变换。例如:当你有一个window坐标系统中的点时,你可以用window来将它变换到某个特定view中的坐标值。
- 使用window的通知事件来跟踪window的改变。例如:当window可见、隐藏、接受、放弃键盘输入状态时,window会生成通知事件,你可以使用这些通知事件来进行对应的操作。
七、创建和配置Window
1. 通过编程创建Window
如果你想通过编程来创建应用的主window,你应当在application:didFinishLaunchingWithOptions中包含类似下面的代码:
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
2. 往Window中添加内容
每个window都有一个唯一的root view对象(通过对应的root view controller来维护),它包含了所有其他的view。使用唯一的root view对象能简化改变界面的操作。如果你要显示新的界面,你只需要替换掉root view即可。你可以使用addSubview方法来添加内容到window中,例如:添加一个view controller的view,你可以使用如下的代码:
window.addSubview(viewController.view)
通常你通过设置window的rootViewController属性来设置root view。一般来说你可能会用到scroll view、table view和image view来作为你的root view。
当你初始化root view的时候,你需要设置初始的大小和位置。当应用没有状态栏或者有一个半透明的状态栏时,你可以把root view的大小设置成window的大小。如果应用有一个不透明的状态栏时,把你的root view放到状态栏下面,并且相应的减少view的高度。
3. 改变Window的Level
每个UIWindow对象都有个可配置的windowLevel属性。它决定了window之间的位置顺序。一般你不需要改动level属性。新建的window自动会给赋予normal window level值,它表示window是用来展示应用相关内容的。更高的window level是用来给那些需要浮动在应用内容之上的内容提供的,例如:状态栏和提示信息。通常情况下,当你调用相应的接口时,系统会自动帮你设定window level,例如:当你显示一个alert view的时候,系统会自动创建一个浮动在你应用之上的window。
八、监控Window的改动
如果你希望跟踪window的改动,你可以用下列的window通知消息:
- UIWindowDidBecomeVisibleNotification
- UIWindowDidBecomeHiddenNotification
- UIWindowDidBecomeKeyNotification
- UIWindowDidResignKeyNotification
UIWindowDidBecomeVisibleNotification和UIWindowDidBecomeHiddenNotification通知在你的window被编程改变之后触发。当你的应用被转到后台运行的时候,尽管你的window不在屏幕上显示了,你也不会收到通知。
UIWindowDidBecomeKeyNotification和UIWindowDidResignKeyNotification通知帮助你跟踪哪个window是key window。所谓key window就是当前哪个window正在接收键盘事件以及其他非触摸事件。然而触摸事件还是会被发送到触摸事件发生的那个window。事实上,只要事件中不包含坐标值的,都会被发送到key window,同一时间只能有一个key window。
九、在外接显示上显示内容
不常见,暂时忽略:D