2017-02-28 96 views
1

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

  • 我特别需要针对一个轴对齐的矩形进行裁剪。
  • 能够对另一条任意路径进行剪辑会非常酷。
  • 能够在路径上计算布尔运算会更酷:union,difference,intersection(clipping是交集操作)。

注意为了澄清,我不要求要能与剪辑的路径。我想获得一个实际的剪辑路径,作为一个新的路径。

回答

1

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

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

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

这种方法有一点尴尬的名字,它的内部使用了更好的命名uniqueShapesCreatedFromSlicingWithUnclosedPath:的方法,但应该做你想要什么。

+0

感谢亚当 - 你的应用看起来不错,它很棒,你已经分享了算法。我希望有一个非图书馆的方法,所以我会暂时搁置这个问题,但你会得到我的最高票数!我想象那里不是建立在一个方式,或者你不会建立一个图书馆:-) – Benjohn

+0

如果没有暴露的功能,这有点疯狂。 'CGContext ...'相关函数在内部清楚地利用了CGPath交集功能。但我看不到一种方法来“解决问题”。我想知道是否可以使用'CGContextClip'然后“读出”剪辑路径,但似乎没有办法读出它。 – Benjohn

+0

完全同意 - 对我来说,他们的贝塞尔代码中的这么少的内容暴露在API中是很奇怪的。即使UIBezierPath也更多地限制了MacOS上已经有限的NSBezierPath ...如果你发现一个非库选项,一定要让我知道,我会很好奇的看到它:) –