IOS开发之XCode学习007:UIWindow对象

此文学习来源为: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

转载于:https://www.cnblogs.com/yoyocool/p/8509415.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值