CoreGraphics FillPath和Stroke Path

时间:2012-02-22 14:49:56

标签: objective-c core-graphics

我需要绘制一个六边形并用颜色构建填充图像作为图案。 我做了:

CGContextSaveGState(context);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetFillColorWithColor(context, [[UIColor colorWithPatternImage:[UIImage imageNamed:@"patternerba.png"]] CGColor]);
CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]);
CGContextSetLineWidth(context, 3.0);
// drawing hexagon here...
CGContextStrokePath(context);
CGContextFillPath(context);
[[NSString stringWithFormat:@"Foo"] drawAtPoint:innerRect.origin withFont:[UIFont fontWithName:@"Helvetica" size:16]];
CGContextRestoreGState(context);

但是根据CGContextStrokePath和CGContextFillPath的顺序,我得到一个六边形,但没有填充或填充但没有边框。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:33)

尝试

CGContextDrawPath(context, kCGPathFillStroke);

而不是

CGContextStrokePath(context);
CGContextFillPath(context);

答案 1 :(得分:0)

使用

CGContextDrawPath(context, kCGPathFillStroke);

如sch建议的那样,或在调用FillPath之前再次绘制六边形。 StrokePath和FillPath删除已添加到上下文的路径,因此下一个调用将在没有路径的情况下静默失败。

CGPathRef path = /* drawing hexagon here */;
CGContextAddPath(context, path);
CGContextStrokePath(context);
CGContextAddPath(context, path);
CGContextFillPath(context);

注意:两段代码不相等,并给出不同的结果。