5

CoreGraphics で SVG パスのような楕円弧を描くことは可能ですか?

4

1 に答える 1

8

私は今夜​​同じことに遭遇しました。CG では、非円形の円弧を簡単に描画する方法は提供されませんが、CGPath と適切な変換行列を使用して描画できます。左、上から始まり、幅、高さのサイズの軸に沿った楕円の円弧が必要だとします。次に、次のようなことができます。

CGFloat cx = left + width*0.5;
CGFloat cy = top + height*0.5;
CGFloat r = width*0.5;

CGMutablePathRef path = CGPathCreateMutable();
CGAffineTransform t = CGAffineTransformMakeTranslation(cx, cy);
t = CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, height/width), t);
CGPathAddArc(path, &t, 0, 0, r, startAngle, endAngle, false);
CGContextAddPath(g->cg, path);

CGContextStrokePath(g);

CFRelease(path);

パイ型のくさびを描画する場合は、「CGContextAddPath」呼び出しを CGContextMoveToPoint(cx,cy) と CGContextAddLineToPoint(cx,cy) で囲み、CGContextStrokePath の代わりに CGContextFillPath を使用することに注意してください。(または、塗りつぶしとストロークを同時に行いたい場合は、CGContextDrawPath を使用します。)

于 2012-08-28T03:38:56.173 に答える