【读书笔记】iOS6编程实战 8绘图功能1

来源:互联网 发布:软件欢迎界面 素材 编辑:程序博客网 时间:2024/04/27 20:29

1,iOS的不同绘图系统

iOS主要的绘图系统有UIKit、Core Graphics、Core Animation、Core Image和OpenGL ES,每一个都能针对不同类型的问题起作用。

UIKit是最高级的界面,是OC中唯一的界面。它能用于轻松地访问布局、组成、绘图、字体、图片、动画等。

Core Graphics,UIKit下的主要绘图系统,频繁用于绘制自定义视图。它高密度集成于UIView和其他UIKit部分。

Core Animation这个提供了强大的2D和3D动画服务。

Core Image提供了非常快的图片过滤方式,比方说切图、锐化、扭曲和其他效果。

OpenGL ES主要用来编写高性能游戏。

2,UIKit和视图绘图周期

所有的绘制都发生在主线程。这就是不要在主线程中执行长时间运行操作的一个原因。这不仅会阻碍绘制更新,还会阻碍事件处理(比如响应触摸事件)。对于当前的UIKit上下文来说绘图不是线程安全的。

iOS在运行循环中整合所有的绘图请求,并一次将它们绘制出来。不能在主线程中进行复杂的处理。不能再主线程之外的主视图上下文绘制。

3,视图绘制和视图布局

因为布局成本通常要低于绘制。之所以布局成本低,是因为UIView的缓存通过GPU的位图进行绘图操作。使用GPU可以是这些位图的移动,显示,隐藏,旋转,甚至变形和合并的成本非常低。当你调用setNeedsDisplay方法,他就被标记为“需要重新刷新的”,并且会在下一次绘制周期中重新绘制。大部分UIKit视图会在其数据发生变化时自动管理绘制操作,因此除了自定义视图,一般并不需要调用setNeedsDisplay。重写layoutSubviews的话,就可以让应用在设备旋转或视图滚动时更加流畅。如果数据改变后只需要进行布局更新,则可以调用setNeedsLayout方法。(地图开发经常会用到)

4自定义视图绘制

视图可以通过子视图、图层或实现drawRect方法来表现内容。通常说,如果实现了drawRect方法,最好就不要再会用图层和子视图了。

2D绘图一般可以拆分成以下几个操作:线条、路径、文本、图片、渐变。2D绘图不能操作单独的像素,因为像素是依赖于目标的。

UIKit和Core Graphics都是用的是painter绘图模型。这意味着每个命令都是依次绘制并在事件循环中在上一次绘图上叠加内容的。必须从底层开始向上绘制。绘制的画布不受保护。

0 0