2012-06-15 99 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'讓我感到困惑!我唯一的問題是,這會在心臟上創建兩個半圓而不是使它看起來完全圓整 - 更新代碼以顯示差異 –