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

请注意,如果您想绘制一个饼形楔形,则只需用 CGContextMoveToPoint(cx,cy) 和 CGContextAddLineToPoint(cx,cy) 围绕“CGContextAddPath”调用,并使用 CGContextFillPath 而不是 CGContextStrokePath。(或者如果你想同时填充和描边,使用 CGContextDrawPath。)

于 2012-08-28T03:38:56.173 回答