CodeV

1.12-裁剪

裁剪使您能够排除在上下文中路径外的任何绘制操作。要实现裁剪,你需要添加一个路径到你的上下文,然后调用CGContextClip()裁剪函数。图 1-12 显示了一个示例,其中绘制到上下文的彩色圆被裁剪到单词Hello的字母内。

图1-12

图 1-12 随机彩色圆被裁剪到单词Hello的边界内。

清单 1-11 演示了裁剪过程中涉及的步骤:

  1. 保存图形状态。这使您能够在以后将状态恢复到裁剪前的版本。如果您不需要返回到未裁剪的状态,可跳过此步骤。
  2. 添加路径到上下文并使用CGContextClip()裁剪。添加路径会将其临时存储在图形上下文中。 存储时,通过裁剪创建一个遮罩蒙版。这将屏蔽您不想绘制的上下文的部分。此示例使用与CGContextClip()函数不兼容的UIBezierPath实例。从贝塞尔路径的CGPath属性检索出CGPathRef对象并传递给上下文。
  3. 裁剪时,执行标准绘图操作。在裁剪路径的边界外绘制的材料将自动被丢弃。
  4. 最后,恢复图形状态。这允许您恢复正常绘图而不进行任何进一步的裁剪,将上下文返回到开始裁剪操作之前的状态。

这个过程就是保存,裁剪,绘制和恢复。第6章介绍了使用Objective-C块在保存和恢复的图形状态内进行裁剪和绘制的方法,而不是通过显式调用来管理这些状态。

清单 1-11 使用裁剪绘图

1
2
3
4
5
6
7
8
9
10
11
12
13
// Save the state
CGContextSaveGState(context);

// Add the path and clip
CGContextAddPath(context, path.CGPath);
CGContextClip(context);

// Perform clipped drawing here

// Restore the state
CGContextRestoreGState(context);

// Drawing done here is not clipped

本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。