quartz2D 学习 1

来源:互联网 发布:阿里云虚拟主机能干嘛 编辑:程序博客网 时间:2024/06/15 05:11

Quartz2D的绘图总是发生在图形环境(Graphics Context)中。视图会在调用drawRect:方法进行绘图之前,创建好图形环境,

通过UIGraphicsGetCurrentContext函数来获得这个图形环,如果直接在图像或者PDF上绘图,需要调用CGBitmapContextCreate或者CGPDFContextCreate函数来创建图形环境。


Graphics Context是一个数据类型(CGContextRef),用于封装Quartz绘制图像到输出设备的信息。Quartz中所有的对象都是绘制到一个Graphics Context中。我们可以将Graphics Context想像成绘制目标。Graphics Context定义了基本的绘制属性,如颜色、裁减区域、线条宽度和样式信息、字体信息、混合模式等。除了 Graphics Context 之外,Quartz 2D API还定义一些数据类型。由于这些APICore Graphics框架的一部分,所以这些数据类型都是以CG开头的。

Graphics Context包含一个绘图状态栈。当Quartz创建一个Graphics Context时,栈为空。当保存图形状态时,Quartz将当前图形状态的一个副本压入栈中。当还原图形状态时,Quartz将栈顶的图形状态出栈。出栈的状态成为当前图形状态。可使用函数CGContextSaveGState来保存图形状态,CGContextRestoreGState来还原图形状态。


常见的英语术语:

Current transformation matrix (CTM):当前转换矩阵

CTM是一种特殊类型的矩阵(affine transform,仿射矩阵),通过平移(translation)、旋转(rotation)、缩放(scale)操作将点从一个坐标空间映射到另外一个坐标空间。

Accuracy of curve estimation (flatness):曲线平滑度

内存管理:对象所有权
Quartz
使用Core Foundation内存管理模型(引用计数)。所以,对象的创建与销毁与通常的方式是一样的。在Quartz中,需要记住如下一些规则:

  • 如果创建或拷贝一个对象,你将拥有它,因此你必须释放它。通常,如果使用含有”Create”“Copy”单词的函数获取一个对象,当使用完后必须释放,否则将导致内存泄露。
  • 如果使用不含有”Create”“Copy”单词的函数获取一个对象,你将不会拥有对象的引用,不需要释放它。
  • 如果你不拥有一个对象而打算保持它,则必须retain它并且在不需要时release掉。可以使用Quartz 2D的函数来指定retainrelease一个对象。例如,如果创建了一个CGColorspace对象,则使用函数CGColorSpaceRetainCGColorSpaceReleaseretainrelease对象。同样,可以使用Core FoundationCFRetainCFRelease,但是注意不能传递NULL值给这些函数。

当前的绘图环境创建一个Graphics Context。我们可以通过调用UIGraphicsGetCurrentContext函数来获取这个Graphics Context

在绘制路径后,将清空图形上下文。我们也许想保留路径,特别是在绘制复杂场景时,我们需要反复使用。基于此,Quartz提供了两个数据类型来创建可复用路径—CGPathRefCGMutablePathRef。我们可以调用函数CGPathCreateMutable来创建可变的CGPath对象,并可向该对象添加直线、弧、曲线和矩形


原创粉丝点击