UIColor SetFill不起作用

Ale*_*der 1 core-graphics objective-c uicolor ios

在这段代码中

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);
Run Code Online (Sandbox Code Playgroud)

使用setFill方法的行不起作用.这可能是什么问题?代码位于drawRect:方法中

Dav*_*ist 5

setFill不是用于Core Graphics绘图,而是用于绘制[myUIBezierPath fill];

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

CGContextSetFillColorWithColor(context, [[UIColor cyanColor] CGColor]);
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
Run Code Online (Sandbox Code Playgroud)

另外,以下行:

CGContextDrawPath(context, kCGPathStroke);
Run Code Online (Sandbox Code Playgroud)

只会描边路径,因为绘图模式设置为kCGPathStoke.要填写它,你应该替换它

CGContextDrawPath(context, kCGPathFillStroke);
Run Code Online (Sandbox Code Playgroud)

如果您的路径中有洞或自身穿过,则应使用偶数填充和笔划

CGContextDrawPath(context, kCGPathEOFillStroke);
Run Code Online (Sandbox Code Playgroud)