0

Core Graphicsでハートの形を描くためのパスを作成しましたが、これを行うために、ひし形と2つの円を作成しました。この画像は見栄えがしますが、「実際の」を取得できるかどうかを知りたいだけです。このCGPath/CGContextからのハートの形。

これがハートを描くためのコードです(興味のある人のために)。この形状は、ハートの「こぶ」と先の尖った三角形の間の接続がスムーズであるため、私が作成したいものです。

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);

これを生成します

そしてこのコード:

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);

これを生成します

これは可能で簡単に実装できますか?もしそうなら、どのように?

前もって感謝します!

4

2 に答える 2

0

複数のパスの結合を計算するパブリック関数はありません (私が知る限り、プライベート関数もありません)。ベジエ パスの結合を計算することは、困難で複雑な問題です。

やりたいことによっては、もっと簡単な方法があるかもしれません。ユニオン パスで何をしたいですか?

于 2012-06-15T22:44:09.790 に答える
0

3 つの異なる図形を描画する代わりに、次のようにして 1 つの図形を描画する必要があります。

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()2 回使用してから、尖った端の点まで線を引き、それを閉じます。

于 2012-06-15T22:50:39.740 に答える