介绍一下Quartz 2D,主要资料来源于苹果官网;不足之处有请 大家拍砖。
Quartz 2D是iPhone OS和Mac OS X环境下的二维绘图引擎。借用Quartz 2D API,你可以接触到这样一些特性:基于路径的绘图,透明度绘图,遮盖,阴影,透明层,颜色管理,防锯齿渲染,生成PDF,以及PDF元数据相关处理。可能的时候,Quartz 2D会借助硬件的力量。
在Mac OS X下,Quartz 2D能与其它图形图像技术相结合——Core Image,Core Video,OpenGL,以及Quick Time。
类似的,在iPhone OS下的Quartz 2D也能与其它的图像和动画技术相结合——Core Animation,OpenGL ES,以及UIKit类。
1. 页面(Page)
Quartz 2D使用画笔模型——每一个绘图操作在一块输出画布上进行一层绘制(paint),这个画布就叫做页面。绘制在页面上的东西无法改动,除非修改该页面。
下图显示了“后来者居上”的遮盖顺序。页面可以是一张真正的纸(如果输出设备是打印机);可以是一张虚拟的纸(如果输出设备是pdf);甚至可以是一幅位图。
2. 绘制目标:图形内容(Graphics Context)
图形内容是一个复杂的数据类型(CGContextRef),用于封装Quartz用于绘图的信息。这些信息包括了绘图参数以及页面上的绘图的代表。
同一幅画可以绘制到不同的设备上,而只需要改变图形内容的,无需改变Quartz绘制顺序。你不需要自行针对设备进行计算——Quartz会替你完成这一切。
3. Quartz 2D的模糊数据类型(Opaque Data Type)
在图形内容之外,Quartz 2D还定义了一系列模糊数据类型,均以CG为前缀。其中三种数据类型如下图所示。
4. 图形状态(Graphics States)
Quartz 2D根据当前的图形状态来修改绘图结果。例如,当你调用函数来填充颜色时,你同时也就修改了储存在图形状态中的数值。其它常用的图形状态颜色包括线宽,当前位置,以及字体大小。
图形内容包含了一个堆栈,储存了图形状态。初建图形内容时,此堆栈为空。图形状态可以通过函数 CGContextSaveGState 和 CGContextRestoreGState 来保存和恢复。
5.Quartz 2D坐标
Quartz 2D的坐标体系如下图所示,原点在左下方。
考虑到不同的设备有着不同的图像能力,因此图形的位置和大小必需独立于设备来定义——这由当前变换矩阵(CTM)来完成。
6. 内存管理
几个简单实用的准则:
6.1 如果你创建或复制一个对象,该对象的retain值会加一;因此你也必需释放它。具体反映在带有Create或Copy的函数名当中。
6.2 反之,如果函数名中没有Create或Copy,你就不需要释放。
6.3 如果你不拥有一个对象但需要使用它,你可以retain之后再释放