2012-07-06 16 views

答えて

5

私は今夜同じことに遭遇しました。 CGは非円弧を描く簡単な方法を提供しませんが、CGPathと適切な変換行列を使用して行うことができます。左上、上端、および幅、高さのサイズで始まる軸に揃えられた楕円の弧が必要であるとします。そして、あなたはこのような何かを行うことができます。

あなたはパイ形のウェッジを描きたい場合は、単に「CGContextAddPath」(CY、CX)CGContextMoveToPointで呼び出し、CGContextAddLineToPoint(CXを囲むこと
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); 

注意、 cy)を使用し、CGContextStrokePathではなくCGContextFillPathを使用します。 (または、同時に塗りつぶしてストロークしたい場合は、CGContextDrawPathを使用してください)

+0

素晴らしい作品 - NB:私が作った間違いをしないでください:) MoveToPointを使用していてもCGAffineTransformMakeTranslationが必要です*(カーブが原点にある間に変換tを適用しなければならない、そうでなければAppleのスケール変換も原点からオフセットを掛けます) – Adam

+0

ストロークの幅をスケールします。 – Grodriguez

関連する問題