【问题标题】:Clipping a CGPathRef or UIBezierPath裁剪 CGPathRef 或 UIBezierPath
【发布时间】:2017-02-28 14:45:54
【问题描述】:

鉴于我有一个CGPathRefUIBezierPath 或其他一些等效的 iOS 表示,是否有内置的库函数可以用来为我计算这个对象的剪辑?

  • 我特别需要对轴对齐的矩形进行剪辑。
  • 能够对另一条任意路径进行剪辑会非常酷。
  • 能够计算路径上的布尔运算会更加酷:并集、差集、交集(剪裁是交集操作)。

注意为了澄清,我要求能够绘制带有剪切的路径。我想获取一个实际的剪切路径,作为新路径。

【问题讨论】:

    标签: ios core-graphics uibezierpath cgpath


    【解决方案1】:

    查看我对this other question 的类似回答。我写了一个库,可以让你计算任意两个 UIBezierPath 之间的交点并计算它们之间的剪切路径。图书馆位于https://github.com/adamwulf/ClippingBezier

    虽然其他问题涉及形状的交集,但您也可以简单地将两条路径拆分为组件。

    NSArray* clippedPathSegments = [UIBezierPath redAndGreenAndBlueSegmentsCreatedFrom:path1 bySlicingWithPath:path2 andNumberOfBlueShellSegments:NULL];
    

    该方法的名称有点别扭,它在内部用于更好命名的 uniqueShapesCreatedFromSlicingWithUnclosedPath: 方法,但应该做你想做的事。

    【讨论】:

    • 感谢 Adam - 你的应用看起来不错,很高兴你分享了其中的算法。我希望采用非图书馆方法,所以我会暂时搁置这个问题,但你会得到我的支持!我想没有内置方式,否则您就不会构建库:-)
    • 如果没有公开的功能,这有点疯狂。 CGContext… 相关函数在内部清楚地利用了 CGPath 交集功能。但我看不到“把它弄出来”的方法。我想知道是否可以使用CGContextClip 然后“读出”剪辑路径,但似乎没有办法读出它。
    • 完全同意——对我来说很奇怪,他们的贝塞尔代码很少暴露在 API 中。甚至 UIBezierPath 也比 macOS 上已经有限的 NSBezierPath 更加有限......如果你找到一个非库选项,一定要告诉我,我会很好奇看到它:)
    • 当其中有 强大且相当惊人的方法时尤其奇怪,例如 CGPathCreateCopyByStrokingPath,它具有用于剪切的那种路径 -> 路径功能。
    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 2012-02-05
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多