15.1 Quartz 2D

15.1 Quartz 2D

在之前的章节中,我们学习的用户界面控件大多都是基于UIKit框架,或者继承自UIKit框架中某些控件类进行扩展的框架。但是iOS提供了一个更为底层的绘图框架——Core Graphics,这个框架可以帮助我们进行更多的绘图工作。本章以Core Graphics框架中的Quartz 2D为主要内容,讲解如何使用Quartz 2D进行图形的绘制。

Quartz 2D是一个二维绘图引擎,可在iOS环境中访问,也可以在所有macOS的应用程序环境中访问。我们可以使用Quartz 2D应用程序编程接口(API)来访问基于路径的绘图,绘制透明度、阴影,实现颜色管理、平滑渲染、PDF文档生成和PDF元数据访问等功能。Quartz 2D尽可能地利用到了图形硬件的强大功能。

在macOS中,Quartz 2D可以与所有其他的图形和成像技术一起使用,如Core Image、Core Video、OpenGL和QuickTime。Quartz 2D可以使用QuickTime函数GraphicsImportCreateCGImage从QuickTime图形导入器中为Quartz创建图像。Core Image是一个支持图像处理的框架,并且Quartz 2D和Core Image之间可以进行数据传递。

同样,在iOS中,Quartz 2D可与所有可用的图形和动画技术配合使用,例如Core Animation、OpenGL ES和UIKit等等。

Quartz 2D提供了各种直线、形状以及图像的绘制函数,这些函数接口大部分是C语言的API,而不是Swift的函数。此外,正如其名称所示,Quartz 2D只能提供2D绘制,所以不能奢望它能帮我们进行3D画面的绘制操作。

Quartz 2D在绘图时,会有“画布(canvas)”这个概念,每次连续的绘制操作都会在一个画布上进行。画布上可以不断地绘制新的图形,画布也可以被其他画布叠加,展示效果是通过叠加这些绘制效果而成的,后添加的效果会最先被展示出来。

Quartz的绘制操作是执行在图形上下文(Graphics Context)中的。每个上下文都是一个CGContext的实例,在获取到某个上下文之后,Quartz 2D就可以在这个上下文中进行绘图操作。图形上下文表示绘图目标,包含了绘图时所需要的参数和指定设备的信息,其中定义了基本的绘图特性如颜色、裁剪区域、线条宽度和样式、字体等。

我们可以通过Core Graphics或者UIKit提供的函数获取一个图形上下文。Core Graphics提供了诸如bitmap、PDF和打印机等不同种类的上下文;UIKit提供了函数用于获取当前UIView对应的上下文,如果要在UIView上进行Quartz绘制,那必须先获取到UIView的上下文。