如何在 macOS 上反转 CGPath 的点顺序

How to reverse the point order of a CGPath on macOS

我正在寻找基于 macOS 上的输入 CGPath 形状制作反向剪辑 CGPath。我的计划是简单地制作一个足够大的简单矩形,然后根据缠绕方向规则将输入路径的逆序版本添加到其中以制作孔。

问题是我似乎找不到任何方法来反转 CGPath。在 iOS 上似乎有一个用于 UIBezierPath 的 bezierPathByReversingPath,但我在 macOS 上找不到类似的东西(编辑:事实证明这是我的一个错误,NSBezierPath 有相应的方法).有谁知道如何反转现有 CGPath 的点顺序/绘制方向?

我发现这个旧线程,从八年前开始要求或多或少相同的东西,但似乎没有针对 macOS 的解决方案,除了一个,不幸的是链接不再有效,我正在不允许发表评论。 How to reverse the point order of a CGPath所以我希望这次好运。

虽然不是很优雅,但最后我通过 NSBezierPath 做到了这一点。在这些步骤中:

  1. 根据CGPath制作NSBezierPath,使用CGPathApply将CGPath中的元素一一获取,并将对应的添加到NSBezierPath中。 (比如像这样

  2. 在 NSBezierPath 上使用 bezierPathByReversingPath 来反转点顺序。

  3. 通过从 NSBezierpath 中的元素构造一个新的 CGPath,从 NSBezierPath 中获取反向的 CGPath(例如:How can i convert NSBezierPath to CGPath