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 不是用于 Core Graphics 绘图,而是用于像 [myUIBezierPath fill] 这样的绘图;

而是使用以下方法设置填充颜色和描边颜色:

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

您不仅需要CG*像 David 建议的那样调用适当的方法来设置填充,还需要在设置填充和描边属性后使用以下内容实际执行填充:

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