2012-06-15 67 views
0

我在Core Graphics中创建了一个绘制心脏形状的路径,但是,为此,我创建了一个菱形图形和2个圆圈,此图像看起来很棒,但我只想知道是否可以从此CGPath/CGContext获取“实际”心脏形状。获取仅合并Core图形路径的外部路径

这里是画一个心脏(有兴趣的人士)的代码,这种形状是一个我想创建作为和尖三角形心脏“拱”之间的连接都顺利:

CGPathAddEllipseInRect(heartPath, NULL, CGRectMake(0, 0, 20, 20)); 
CGPathAddEllipseInRect(heartPath, NULL, CGRectMake(20, 0, 20, 20)); 

CGPathMoveToPoint(heartPath, NULL, 37.5, 16.5); 

CGPathAddLineToPoint(heartPath, NULL, 37.5, 16.5); 
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5); 
CGPathAddLineToPoint(heartPath, NULL, 2.5, 16.5); 
CGPathAddLineToPoint(heartPath, NULL, 20, 10); 

CGPathCloseSubpath(heartPath); 

Produces this

而这种代码:

CGPathAddArc(heartPath, NULL, 10, 10, 10, M_PI, 0, false); // Left hump 
CGPathAddArc(heartPath, NULL, 30, 10, 10, M_PI, 0, false); // Right hump 
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5); // Pointy end 

CGPathCloseSubpath(heartPath); 

Produces this

这是否可能且易于实现?如果是这样如何?

在此先感谢!

回答

0

没有公共函数来计算多个路径的联合(也没有任何私有函数,据我所知)。计算贝塞尔路径的联合是一个困难而复杂的问题。

根据你想要做什么,可能有更简单的方法。你想用工会的道路做什么?

0

除了绘制3种不同的形状,你应该做这样的事情绘制一个形状:

CGPathAddArc(heartPath, NULL, 10, 10, 10, M_PI, 0, false); // Left hump 
CGPathAddArc(heartPath, NULL, 30, 10, 10, M_PI, 0, false); // Right hump 
CGPathAddLineToPoint(heartPath, NULL, 20, 37.5); // Pointy end 
CGPathCloseSubpath(heartPath); 

我还不能肯定所有的值都是正确的,但基本上你只想绘制的一部分该圆圈,所以使用CGPathAddArc()两次,然后一行到尖端的点,然后关闭它。

+0

是的,最初这是我试图做的事(尽管'CGPathAddArc'让我感到困惑!我唯一的问题是,这会在心脏上创建两个半圆而不是使它看起来完全圆整 - 更新代码以显示差异 –