图5-7显示了一条Bezier路径的三个路径。由一系列椭圆形旋转并放置成圆形,最左边的图像被简单地填充。中间图像反转该路径,填充位于路径外的所有区域。右边的图像提供第三次采集:它反转路径,但反转限制在路径的自然边界之内。
图5-7左:原始路径 中间:反转路径。右:只在路径自然边界内反转路径。
每个反转操作利用偶/奇填充规则。这个规则,正如你从第4章中记得的那样,基本上说,路径中的任何一点朝向无穷远都必须通过一个奇数的边缘。在原始路径外添加一个矩形会翻转每个点的偶数和奇数值,以产生反向选择。中间的图像(通过清单5-9中的反转方法)向路径添加了一个无限的矩形。这为所有路径点建立了一个边界,将它们的内向性翻转成外向性。偶数/奇数规则使用新的“内部”,现在完全落在原路径外,来确定要填充什么。
右边的图像做同样的事情 - 添加另一个矩形,所以路径内部将翻转到外部,但它通过使用原始的路径边界来实现。 代码清单5-9中的boundedInverse
方法负责(实现这一过程)。 路径(自然)边界外的任何点都保留在反向路径“外部”,并且不会被填充。
反转路径是许多重要绘图操作的强大工具,例如内部和外部发光以及内部和外部阴影。这些发光和阴影,你将在本章后面阅读到,形成许多Photoshop风格的基元,产生出色的视觉效果的基础。
清单5-9 反转路径
1 | - (UIBezierPath *) inverseInRect: (CGRect) rect |
本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。