联合或逻辑或两个CGPath(或CAShapeLayers)创建一个

时间:2015-03-07 02:27:12

标签: c# ios xamarin.ios cashapelayer cgpath

我正在尝试在iOS中建立多个CGPath的联盟。我怎样才能做到这一点?

我尝试使用“path.AddPath()”添加组合路径但是我得到了这种奇怪的伪像,好像它正在进行Join而不是Union。我也尝试过使用“path.CopyByStrokingPath()”,但它也留下了这些奇怪的空白区域。我注意到CopyByStrokingPath的参数是“CGLineJoin”,但我真的想要“CGLineUnion”,但这似乎不存在。

基本上你在这里看到的,我在每个物体周围做一个圆形路径,然后在每个物体之间制作矩形路径以填补空隙。然后我将所有路径组合在一起,并在两者之间获得这些尴尬的白色空间(当我想要它完全填满时)。我可以使每个形状(圆形和矩形)成为一个单独的图层然后空间消失,但​​是我只有一个图形的15个单独的图层....我真的只想组合路径并将它绘制到一个CAS形状上层

Screenshot of Joins

参考文献

Multiple CGPaths to create one

How to implement boolean operations on bezier paths

1 个答案:

答案 0 :(得分:0)

事实证明,由点和&创建的矩形之间存在很大差异。行与通过CGPath.AddRect创建的矩形。

CGPath path = ...
CGRect rectToDraw = ...
CGAffineTransform transform = ....
path.AddRect (transform, rectToDraw);

如果您想要重叠形状并使重叠部分完全像逻辑联盟一样填充,则上述方法有效。

以下代码不会像联盟一样重叠,并产生尴尬的差距,如原始帖子中的屏幕截图所示。它似乎使用其他逻辑表达式重叠

CGPath path3 = new CGPath ();
path3.MoveToPoint (100, 100);
path3.AddLineToPoint (100, 250);
path3.AddLineToPoint (350, 250);
path3.AddLineToPoint (350, 100);
path3.CloseSubpath ();