iOS Programming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于View和View Hierarchy
2015-06-05 23:22
696 查看
关于 View
View是UIView(或其子类)的一个实例
View负责对自己的绘制
View处理如触摸等事件
View存在于某个
View Hierarchy,且 View Hierarchy的根为application的window
View既可以在Interface
Builder,也可以在代码中创建
关于 ViewHierarchy
当 application启动时,会创建一个UIWindow的实例作为整个
application中所有 view的容器,然后便可以向其中添加其他
View。(在 AppDelegate
中对应为 application:didFinishLaunchingWithOptions:方法)
当 view被添加到window中后,它就成为了这个
window的 subview,同时该
view也可以拥有自己的 subview,于是最终便会形成一个由
view组成、window为根的view
hierarchy。
当 view hierarchy创建完毕后,它将会分为两步被绘制到屏幕上:
每个 hierarchy中的
view(包括 window)绘制自己并
return给自己的 layer(
layer是 CALayer的实例)。
所有的 layer被叠加在一起呈现在屏幕上。
关于 Frame,CGRect, CGPoint
UIView的
designated initializer是 initWithFrame:,该方法有一个参数类型为
CGRect,赋给该 view的
frame属性,然后生成一个 view的实例。
View的
frame指明 view的尺寸和
view与其 superview的相对位置。
CGRect是一个C的结构体,它包含另外两个结构体
CGPoint,分别用为 origin和
size,每个结构体中有 float类型的
x , y两个成员变量。
通过代码产生 view和view
hierarchy的一般步骤:
通过 CGRectMake方法传入尺寸和相对于
superview的位置坐标,生成一个 CGRect作为
view的frame
通过 View的
initWithFrame:方法生成初始化
view实例
对该 view实例进行需要的设置(如背景颜色等)
将该 view通过其
superview的addSubview方法添加到
hierarchy中
同时会自动将该 view的
superview属性指向该 superview(superview属性为
weak以避免循环引用)
关于 point和
pixels
为了兼顾多种分辨率和尺寸,iOS中采用
point描述尺寸和位置,而不是 pixels。
non-Retina设备(iPhone
2G, 3G, 3GS)
Render @1x即 1 point对应
1 pixel
Retina设备(iPhone
4, 4s, 5, 5s ,6)
Render @2x即 1 point对应
2 pixel
Retina设备(iPhone
6 Plus)
Render @3x即 1 point对应
3 pixel
实际在渲染时为 @2.46x,但苹果为了方便开发者故使用
@3x素材,再缩放到@2.46x。
自定义 view的绘制方法(drawRect:)
drawRect:方法是
view将其自身绘制到 layer上的过程,现有的
UIView均已实现了该方法,例如 UIButton中该方法在
view中间绘制亮蓝色文本,而自定义 view则需要自己覆写该方法。
覆写 drawRect:的一般步骤:
获取 view的
bounds,bounds是UIView的属性,是描述需要绘制的东西相对于view的尺寸和位置。(
frame是描述 view相对于其superview的尺寸和位置)因此若需要一个全屏的
frame可以取 window的
bounds。
使用 UIBezierPath 类绘制图形
创建 UIBezierPath类的实例
为该实例指明绘制的路径(可参见开发者文档)
配置该 path实例的属性(如
lineWidth)
对画笔进行设置(如stroke的颜色)
向该实例发送消息(如 stroke)进行绘制
View是UIView(或其子类)的一个实例
View负责对自己的绘制
View处理如触摸等事件
View存在于某个
View Hierarchy,且 View Hierarchy的根为application的window
View既可以在Interface
Builder,也可以在代码中创建
关于 ViewHierarchy
当 application启动时,会创建一个UIWindow的实例作为整个
application中所有 view的容器,然后便可以向其中添加其他
View。(在 AppDelegate
中对应为 application:didFinishLaunchingWithOptions:方法)
当 view被添加到window中后,它就成为了这个
window的 subview,同时该
view也可以拥有自己的 subview,于是最终便会形成一个由
view组成、window为根的view
hierarchy。
当 view hierarchy创建完毕后,它将会分为两步被绘制到屏幕上:
每个 hierarchy中的
view(包括 window)绘制自己并
return给自己的 layer(
layer是 CALayer的实例)。
所有的 layer被叠加在一起呈现在屏幕上。
关于 Frame,CGRect, CGPoint
UIView的
designated initializer是 initWithFrame:,该方法有一个参数类型为
CGRect,赋给该 view的
frame属性,然后生成一个 view的实例。
View的
frame指明 view的尺寸和
view与其 superview的相对位置。
CGRect是一个C的结构体,它包含另外两个结构体
CGPoint,分别用为 origin和
size,每个结构体中有 float类型的
x , y两个成员变量。
通过代码产生 view和view
hierarchy的一般步骤:
通过 CGRectMake方法传入尺寸和相对于
superview的位置坐标,生成一个 CGRect作为
view的frame
通过 View的
initWithFrame:方法生成初始化
view实例
对该 view实例进行需要的设置(如背景颜色等)
将该 view通过其
superview的addSubview方法添加到
hierarchy中
同时会自动将该 view的
superview属性指向该 superview(superview属性为
weak以避免循环引用)
关于 point和
pixels
为了兼顾多种分辨率和尺寸,iOS中采用
point描述尺寸和位置,而不是 pixels。
non-Retina设备(iPhone
2G, 3G, 3GS)
Render @1x即 1 point对应
1 pixel
Retina设备(iPhone
4, 4s, 5, 5s ,6)
Render @2x即 1 point对应
2 pixel
Retina设备(iPhone
6 Plus)
Render @3x即 1 point对应
3 pixel
实际在渲染时为 @2.46x,但苹果为了方便开发者故使用
@3x素材,再缩放到@2.46x。
自定义 view的绘制方法(drawRect:)
drawRect:方法是
view将其自身绘制到 layer上的过程,现有的
UIView均已实现了该方法,例如 UIButton中该方法在
view中间绘制亮蓝色文本,而自定义 view则需要自己覆写该方法。
覆写 drawRect:的一般步骤:
获取 view的
bounds,bounds是UIView的属性,是描述需要绘制的东西相对于view的尺寸和位置。(
frame是描述 view相对于其superview的尺寸和位置)因此若需要一个全屏的
frame可以取 window的
bounds。
使用 UIBezierPath 类绘制图形
创建 UIBezierPath类的实例
为该实例指明绘制的路径(可参见开发者文档)
配置该 path实例的属性(如
lineWidth)
对画笔进行设置(如stroke的颜色)
向该实例发送消息(如 stroke)进行绘制
相关文章推荐
- OpenCSP开源程序解析之OPENCSP_AuthUI.cpp
- JavaWeb系列之七(response域与request)
- UITableViewCell重用和性能优化
- iOS学习笔记(2)— UIView用户事件响应
- org.json.JSONException: No value for xxx
- UIScrollView
- 内核中的中断函数request_irq()
- quick接入SDK
- [GUI] QT事件与X11的关系
- UINavigationController 导航控制器
- leetcode_PermutationSequence
- ActionScript 3.0 学习(二) Flash Builder找不到所需版本的Adobe Flash Player
- NGUI使用4——创建动态字体
- NGUI使用3——制作图集&自定义按钮&切换按钮图片
- NGUI使用2——Button -- 按钮
- NGUI使用1——label
- UI进阶 —— 收起键盘方法
- UIGestureRecognizer 六种手势的用法 - iOS - UI基础知识总结6
- 一次性移除一个 UIView 所有子视图的方法
- HDU Children’s Queue