7

色でストロークされたいくつかの線を描画してから、その内側を別の線で塗りつぶす(ポリゴンを作成する)のに問題があります。

UIColor *houseBorderColor = [UIColor colorWithRed:(170/255.0) green:(138/255.0) blue:(99/255.0) alpha:1];
CGContextSetStrokeColorWithColor(context, houseBorderColor.CGColor);
CGContextSetLineWidth(context, 3);

// Draw the polygon
CGContextMoveToPoint(context, 20, viewHeight-19.5);
CGContextAddLineToPoint(context, 200, viewHeight-19.5); // base
CGContextAddLineToPoint(context, 300, viewHeight-119.5); // right border
CGContextAddLineToPoint(context, 120, viewHeight-119.5);
CGContextAddLineToPoint(context, 20, viewHeight-19.5);

// Fill it
CGContextSetRGBFillColor(context, (248/255.0), (222/255.0), (173/255.0), 1);
//CGContextFillPath(context);

// Stroke it
CGContextStrokePath(context);

CGContextStrokePathコメントアウトすると、次の結果が得られます。

ここに画像の説明を入力

しかし、ポリゴンのコメントを外しCGContextStrokePathて塗りつぶすと、色がストロークからはみ出します。

ここに画像の説明を入力

このような結果を得るにはどうすればよいでしょうか (描画手順全体を 2 回やり直す必要はありません)。

ここに画像の説明を入力

4

3 に答える 3

2

コンテキストでパスをストロークまたは塗りつぶすと、コンテキストはパスを削除します (作業が完了したことを期待しています)。ストローク後に塗りつぶしたい場合は、パスを再度追加する必要があります。

おそらく、CGPathRef pathローカル変数を作成し、パスを作成し、追加し、ストロークし、再度追加して塗りつぶすのが最善の方法です。

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, 20, viewHeight-19.5);
CGPathAddLineToPoint(path nil, 200, viewHeight-19.5); // base
CGPathAddLineToPoint(path nil, 300, viewHeight-119.5); // right border
CGPathAddLineToPoint(path nil, 120, viewHeight-119.5);
CGPathAddLineToPoint(path nil, 20, viewHeight-19.5);

CGContextAddPath(context, path);
CGContextFillPath(context);

// possibly modify the path here if you need to

CGContextAddPath(context, path);
CGContextStrokePath(context);
于 2013-05-09T13:12:32.290 に答える