2012-07-06 142 views

回答

5

今晚我碰到了同样的事情。 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),并使用CGContextFillPath而不是CGContextStrokePath。 (或者如果你想同时填充和描边,使用CGContextDrawPath。)

+0

工程很棒 - 注意:不要犯我犯的错误:)。即使您使用MoveToPoint,CGAffineTransformMakeTranslation也是必需的(因为变换t必须在曲线位于原点时应用,否则Apple的比例变换也会将您的偏移量与原点相乘) – Adam 2013-02-18 12:30:45

+0

请注意,缩放笔画宽度。 – Grodriguez 2017-11-23 09:33:18