UIBezierPath-您可以“剪切”一个吗?

时间:2019-09-28 17:24:46

标签: ios uibezierpath

假设您拥有已构建的UIBez:

enter image description here

现在,我想“剪切”它,也许用这个矩形:

enter image description here

所以在该示例中,我想要的最终路径是:

enter image description here

(或者在示例中,您可以在右侧“减去”一个矩形,在底部一个“减去”矩形)。

iOS工具包是否包括用于UIBezierPath构建的功能?

我认为答案是“否”,但这是Google不可能做到的事情之一,因为您获得了不相关的质量检查。所以我找不到答案。

请注意-这完全不同于简单地“添加孔”,就像使用.append(例如https://stackoverflow.com/a/57514286/294884的例子)一样

1 个答案:

答案 0 :(得分:1)

没有内置的路径剪切(也绝对没有自动关闭剪切路径)。


除了您提到的“添加孔”技术外,另一种方法是将其蒙版/剪切。而且我知道您知道这一点,但是为了将来的读者,内置的剪切/遮罩仅在图形上下文(或mask的{​​{1}})中可用。例如,如果您有CALayer,则可以设置其CAShapeLayer(例如,设置为下面的虚线矩形所示的矩形):

enter image description here

显然,这种方法无法“关闭”已剪切的路径。

但是,如果您的路径由一系列线段组成,则理论上您可以编写自己的例程来遍历这些线段,以查找与矩形剪贴蒙版的交集(以及检测剪贴是否包含它们)面具)。如果搜索“ UIBezierPath intersection”,将看到一些相关示例。即便如此,您也会遇到一些有趣的极端情况,例如如何以算法方式关闭路径。