【问题标题】:How to reverse the point order of a CGPath on macOS如何在 macOS 上反转 CGPath 的点顺序
【发布时间】:2020-02-25 23:04:29
【问题描述】:

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

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

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

【问题讨论】:

  • bezierPathByReversingPath 存在于NSBezierPath
  • 哇,这真的很有帮助,不知道我是怎么错过的。由于我仍然需要 CGPaths,因此使用仅使用 CGPaths 的更简洁的方法仍然会很好,但我想将 CGPath 转换为 NSBezierPath,将其反转,然后将其转换回 CGPath 是可能的。

标签: macos core-graphics cgpath


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2013-09-26
    • 2021-03-04
    相关资源
    最近更新 更多