1

このコードでは

for (int i=0;i<3;i++) {
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*(i+1), self.yShift+self.rectLen*10);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*(i+1), self.yShift+self.rectLen*10+self.rectLen);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10+self.rectLen);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10);
    CGContextMoveToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*i, self.yShift+self.rectLen*10);
}
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*4, self.yShift+self.rectLen*10);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*4, self.yShift+self.rectLen*10+self.rectLen);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*3, self.yShift+self.rectLen*10+self.rectLen);
    CGContextAddLineToPoint(context, self.xShift+15+self.rectLen*self.width+self.rectLen*3, self.yShift+self.rectLen*10);
    [[UIColor cyanColor] setFill];
    [[UIColor blackColor] setStroke];
    CGContextSetLineWidth(context, 1);
    CGContextDrawPath(context, kCGPathStroke);

setFillメソッドを使用した行は機能しません。これの問題は何でしょうか?コードはdrawRect:メソッドにあります

4

2 に答える 2

5

setFillは、コアグラフィックスの描画用ではなく、[myUIBezierPathfill]のような描画用です。

代わりに、次を使用して塗りつぶしの色と線の色を設定します。

CGContextSetFillColorWithColor(context, [[UIColor cyanColor] CGColor]);
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);

また、次の行:

CGContextDrawPath(context, kCGPathStroke);

描画モードがkCGPathStokeに設定されているため、パスをストロークするだけです。それを埋めるには、次のように置き換える必要があります

CGContextDrawPath(context, kCGPathFillStroke);

パスに穴が開いているか、パスが交差している場合は、奇数の塗りつぶしとストロークを使用する必要があります

CGContextDrawPath(context, kCGPathEOFillStroke);
于 2012-05-16T17:52:19.293 に答える
1

Davidが提案したように、適切なメソッドを呼び出して塗りを設定する必要があるだけでなくCG*、塗りと線のプロパティを設定した後、実際に次を使用して塗りを実行する必要があります。

CGContextSetFillColorWithColor(context, [UIColor cyanColor].CGColor);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor.CGColor);
CGContextFillPath(context);
CGContextStrokePath(context);
于 2012-05-16T18:19:13.877 に答える