1. 每个iOS程序都至少需要一个window,window的作用:
-
包含程序的可视化内容.
-
在传递触摸事件给视图和其他对象中起到重要的作用
-
与视图控制器协作来响应orientation改变.
创建和配置window
1.无论是通过IB或者代码创建window,都应该在application delegate中保留对其的引用(retain it)。
2.无论你在前台或者后台运行程序,总是应该在运行时来创建window。如果直接在后台运行,那么直到程序进入前台时才让window可见。
3.如果你使用IB来创建window,那么建议选中Full Screen at Launch。如果该选项没有被选中,那么你的window会比设备的屏幕小,这样一些触摸事件不会被响应。因为视图默认是不会被剪裁到父视图中的,这使得视图看上去仍然是全屏,但是却不会响应一些事件。
用代码创建window
1.当创建window的时候,总是应当将window的大小设置为整个屏幕的大小,不应该去调整widnow的大小去适应状态栏,状态栏总是显示在window上方。需要调整的是你添加到window中的视图。如果你使用视图控制器,那么视图控制器会自动调整视图的大小。
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; |
UIScreen对象包含了设备整个屏幕的大小(bounding rectangle of the device’s entire screen).当你设置程序的UI时,应当使用该对象的属性来获取屏幕大小
用于指定window大小的属性(只读) 一般为(0.0, 20.0, 320.0, 460.0);
Contains the bounding rectangle of the screen, measured in points. (read-only)
[window addSubview:viewController.view]; |
2.对以上代码,你同样可以设置window的rootViewController属性(nib或者代码)。如果该属性在window载入时被设定,UIKit自动加载该视图控制器的视图到window的根视图。该属性是用来加载根视图的。
3.当配置window的根视图时,你需要负责设置其在window中的大小和位置。如果状态栏透明,将视图大小设置为window的大小,如果状态栏不透明,则将其置于状态栏下方。
4.如果window的根视图时由容器视图控制器,比如tab bar controller, navigation controller, or split-view controller,则你不需要手动设置视图大小。容器视图控制器会自动根据状态栏来设置其视图大小
2.当程序进入后台时,前两个通知并没有发送,因为window在后台仍然是可见的