iOS Programming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于View和View Hierarchy
来源:互联网 发布:lcd字库生成软件 编辑:程序博客网 时间:2024/05/21 09:20
关于 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)进行绘制
0 0
- iOS Programming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于View和View Hierarchy
- iOS Programming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于 View Controllers及其生命周期
- iOSProgramming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于 View 的 Redrawing 和 Run Loop
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part I & II)
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part III)
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part IV)
- Objective-C Programming: The Big Nerd Ranch Guide (2nd Edition) 阅读笔记(Part V)
- Chapter4: View - The Big Nerd Ranch Guide 读书笔记
- Chapter5 : View controller & KVC - The Big Nerd Ranch Guide 读书笔记
- Chapter10. UINavigationController - iOS Programming- The Big Nerd Ranch Guide 读书笔记
- Chapter5: View Redraw 和UIScrollView - The Big Nerd Ranch Guide 读书笔记
- Android.Programming.The.Big.Nerd.Ranch.Guide.3rd.Edition.2017.2.pdf 英文原版 免费下载
- 《Android 编程权威指南》(Android Programming The Big Nerd Ranch Guide)的代码和问题
- Android Programming The Big Nerd Ranch Guide,Second Edition第十六章使用相机Intent部分的改进
- Android编程权威指南Android Programming the big nerd ranch guide
- Chapter 6 : Delegation和Debug - The Big Nerd Ranch Guide 读书笔记
- Big Nerd iOS Programming 第七章笔记
- 《Android权威编程指南(The Big Nerd Ranch Guide)(第二版)》12.4挑战练习
- 揭密Oracle之七种武器二:DTrace语法:跟踪物理IO
- OpenCSP开源程序解析之OPENCSP_M*CSP.cpp
- 哈希(2) - 垂直打印一棵二叉树(使用哈希表实现)
- Clean Code 读书笔记一
- LIGHTOJ 1029 – CIVIL AND EVIL ENGINEER 【PRIM】
- iOS Programming: The Big Nerd Ranch Guide (4th Edition) 阅读笔记-关于View和View Hierarchy
- 【十九】树以及树的存储结构
- LIGHTOJ 1174 – COMMANDOS 【FLOYD】
- LIGHTOJ 1258 – MAKING HUGE PALINDROMES 【KMP】
- HTML5另类塔防游戏 -『三国战线』发布
- OpenCSP开源程序解析之OPENCSP_Main.cpp
- LIGHTOJ 1255-SUBSTRING FREQUENCY 【KMP】
- 杭电 2200
- 编程流程