谁能解释UIBezierPathusesEvenOddFillRule
的属性是如何工作的以及它可以在哪里使用?
我知道我可能会投票失败,但我真的没有在 Apple 的文档中得到解释。
谁能解释UIBezierPathusesEvenOddFillRule
的属性是如何工作的以及它可以在哪里使用?
我知道我可能会投票失败,但我真的没有在 Apple 的文档中得到解释。
奇偶填充规则是确定路径的哪些区域在路径“内部”与“外部”路径的一种方法,在填充路径内部时了解这一点很重要。它们通常仅在路径自身切割孔时有所不同。奇偶规则通常不会遮蔽这些区域,而其他选项通常会。
奇偶规则很简单:
当您在包含路径的画布上直线前进时,计算您穿过路径的次数。如果你穿过奇数次,你就在路径“里面”。如果你穿过偶数次,你就在路径之外。
因此,如果您的路径由两个呈靶心形状的同心圆组成,则奇偶规则会将两个圆之间的区域视为“内部”,而将中心区域视为“外部”。
另一种选择称为非零缠绕规则。(如果usesEvenOddFillRule
是则使用NO
)。非零值再次考虑穿过路径的直线,但对交叉点的计数略有不同。它考虑了绘制路径的方向。(即逆时针圆圈与顺时针圆圈不同。)因此:
当您在包含路径的画布上沿直线前进时,请保持一个计数器,从 0 开始。每次您越过路径从左到右前进的部分路径时(从穿过路径的线观察),在计数器上加一。每次你越过一条从你的右边到左边的路线时,从计数器中减去一个。如果计数器不为零,则您在路径内。否则,你在外面。
因此,在同一个同心圆示例中,如果两个圆的绘制方向相同,则中心圆内部和外部的整个区域都将被视为路径“内部”。如果两个圆的绘制方向相反,中心区域将被视为路径“外部”,如奇偶规则中一样。
这里给出了计算机图形中填充规则的一个很好的解释。(这在 .NET 参考中,但完全相同的原则适用于 Quartz。)
http://msdn.microsoft.com/en-us/library/system.windows.media.fillrule.aspx
简而言之,奇偶填充规则意味着每条边都将出现在输出图形中(这可能会导致单个填充路径中有“洞”),而非零填充规则在大多数情况下会结束这意味着即使绘制的形状包含自相交,它也大多是实心的。
一个简单的例子可以在下面看到。左图使用奇偶填充规则,右图使用非零填充规则。