由于太多的新知识,所以一开始先来科普每个概念。
- Quartz 2D
Quartz 2D可以在iOS环境和所有Mac OS X应用程序内核以外的二维绘图引擎。你可以使用Quartz 2D应用程序编程接口(API)来访问功能,如基于路径的绘图、绘画与透明度,着色,画阴影,透明层,色彩管理,抗锯齿渲染,生成PDF文档,PDF元数据访问。在iOS中,Quartz2D跟CG,OpenGl,还有UIKit一起工作。这里简单介绍几个技术的联系
- Graphics Contexts
- Core Graphics
(一)Quartz 2D
page
只能用比喻去描述,就是好比你画了一幅画,你这张纸当然还有画的内容就叫做page,这个page或许会成为真正的一张画纸,如果你的输出设备是一台打印机;或许是一个虚拟的现实设备,PDF;或许是一个位图,这个实际的类型取决于你使用的Graphics Contexts。
painter`s model
我把这个理解为作画的方式。这个方式可以分为给画先画出轮廓,然后再涂色,但是如果你想在画出轮廓后的画做出修改,只能继续一层层的涂下去把之前的覆盖了。
Quarts2D只能输出到Graphics Context
刚刚提到的page,就是画完之后的东西,现在需要把画收藏起来,那这些destinatisons(Graphics Context)就是储藏的东西,好比相框吧。
这些Graphics Context都是一个不透明的数据类型,(CGContextRef)用来装载Quartz2D画出来的page,这Graphics Context包含参数有图形绘制的参数,还有在特定设备上的表示形式。后面又说了,Graphics Context包含了我需要的所有目的地,因此我只需要拿着画,通过Graphics Context并需要计算转换,就能输出到不同的destinations。
在iOS中可以使用以下Graphics Context(暂时感觉只有前两个需要注意):
- bitmap graphics context
- PDF graphcs context
- window graphics context
- layer context