此文学习来源为:http://study.163.com/course/introduction/1002858003.htm
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
//当框架初始化成功后
//调用此函数
//此函数用来初始化整个程序框架结构
//整个程序对ios开发工程时的入口函数
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//创建一个UIWindow对象
//整个程序中只有一个UIWindow对象
//在程序级别上表示屏幕窗口
//UIWindow也是继承于UIview
//UIWindow是一个特殊的UIView
//UIScreen:表示屏幕硬件表示类
//mainScreen获得主屏幕设备信息
//bounds表示屏幕的宽高值
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//创建一个视图控制器作为UIWindow的根视图控制器
self.window.rootViewController = [[UIViewController alloc] init];
//设置背景颜色
self.window.backgroundColor = [UIColor blueColor];
UIView* view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 150, 150)];
view.backgroundColor = [UIColor orangeColor];
//背景视图
UIView* backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 240, 360)];
backView.backgroundColor = [UIColor greenColor];
//将backView作为view的父亲视图
//子视图的坐标是参照父亲视图的坐标系
//当父亲视图移动时,所有的字视图都会跟着动
[backView addSubview:view];
[self.window addSubview:backView];
//每一个view都有一个window属性
//view.window;
//使window有效并显示到屏幕上
[self.window makeKeyAndVisible];
NSLog(@"%@",view.window);
NSLog(@"%@",backView.window);
NSLog(@"%@",self.window);
return YES;
}
运行打印内容如下:
2018-03-05 15:35:04.703268+0800 UIWindow[1307:60413] <UIWindow: 0x7fd370407cd0; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x6040002572e0>; layer = <UIWindowLayer: 0x604000039a20>>
2018-03-05 15:35:04.703486+0800 UIWindow[1307:60413] <UIWindow: 0x7fd370407cd0; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x6040002572e0>; layer = <UIWindowLayer: 0x604000039a20>>
2018-03-05 15:35:04.703655+0800 UIWindow[1307:60413] <UIWindow: 0x7fd370407cd0; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x6040002572e0>; layer = <UIWindowLayer: 0x604000039a20>>
可见,3个window对象其实是同一个。backView.window作为view.window的父对象,self.window作为backView.window的父对象,当self.window被创建出来后,就是唯一的,整个程序中只有一个UIWindow对象,当把子视图添加到父视图上时,譬如把backView添加到self.window上,就会把self.window作为backView的window属性赋值,也就是把父视图的window属性赋给子视图的window属性赋值,以致所有的window对象都是一样的。
附上UIWindow的关系图:一般情况下,UIWindow不与UIView直接产生联系,而是通过View Controller与UIView直接产生联系。
学习总结:
- 重点:UIWindow的基本概念
- 难点:UIWindow和UIView的关系
源码链接地址:https://pan.baidu.com/s/1yrOLXZZeu9MiOWtMq5-EGA 密码:7t1l