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
IOS开发之XCode学习007:UIWindow对象的更多相关文章
- IOS开发之XCode学习010:定时器和视图对象
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 1.通过点击"启动定时器"按钮 ...
- IOS开发之XCode学习008:UIViewController基础
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 红色框选部分用A代替,AppDelegate类在程序框架启动时,如果在i ...
- IOS开发之XCode学习011:UISwitch控件
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 1.定义UIswitch控件,添加UIswitc ...
- IOS开发之XCode学习009:UIViewController使用
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 通过点击屏幕事件,调用ViewController ...
- IOS开发之XCode学习012:Slider和ProgressView
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 1.定义UISlider和UIProgressV ...
- IOS开发之XCode学习013:步进器和分栏控件
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 1.定义UIStepper和UISegmente ...
- IOS开发之XCode学习014:警告对话框和等待提示器
此文学习来源为:http://study.163.com/course/introduction/1002858003.htm 此工程文件实现功能: 1.警告对话框和等待提示器的概念 2.警告对话框 ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- ios开发之OC基础-类和对象
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
随机推荐
- (转)Elasticsearch 5 Ik+pinyin分词配置详解
今天以这篇文章结束同城旅游网的面试,正好面试官也问到站内检索,可以尝试一下这篇文章介绍的方法.Elasticsearch 5 Ik+pinyin分词配置详解
- MySQL实现差集(Minus)和交集(Intersect)
原文链接: http://www.linuxidc.com/Linux/2014-06/103551.htm MySQL没有实现Minus和Intersect功能,就像它也没有实现cube的功能一样. ...
- 关于http与https之间的区别
年前的时候进行了一家公司的电话面试两轮,视频面试一轮(已拿到offer),过程中遇到了一个关于http与https的问题,当时回答的并不好,今天将其进行了总结和整理,望读者喜欢: 前言 谷歌在2018 ...
- ubuntu下smb的配置
PS: 转自Ubuntu中文论坛 -------------------------------------------------------------------------------- ...
- [Python Study Notes]匿名函数
Python 使用 lambda 来创建匿名函数. lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的.在Python中,lambda作 ...
- Windows Server 2016-抢占FSMO角色
很多情况下,当生产域控制器发生问题无法修复的情况下,我们只能通过抢占FSMO角色以保证用户验证等正常或及时恢复.一般在同一个域环境中,我们往往都会有主备或主辅域控规划,平时工作的时候,两台域控可以实现 ...
- IDEA的配置文件访问
问题起源 IDEA中当前模块的配置文件无法被访问,只能够访问到外层的Project的配置文件.具体情形可表示如下: Project --------------- project.properties ...
- linux文件权限查看及修改-chmod ------入门的一些常识
查看Linux文件的权限:ls -l 文件名称查看linux文件夹的权限:ls -ld 文件夹名称(所在目录)修改文件及文件夹权限:sudo chmod -(代表类型)×××(所有者)×××(组用户) ...
- Js常用的函数
1.用于对正则表达式的函数: var pattern=/\d{3}-\d{2}-\d{4}/;//这里产生的是一个object类型 alert(pattern.test("cscscscs& ...
- poj2635 同余定理 + 素数筛法
题意:给定一个数,这个数是两个素数的乘积,并给定一个限制L,问是否两个素数中存在小于L的数,若存在输出较小质数,否则打印'GOOD'. 思路: 1 . x = a * b, a和b都是素数,那么x只能 ...