2

我有以下代码应该绘制一个描边和填充的矩形,但填充不会显示。

    [[UIColor greenColor] setStroke];
    [[UIColor brownColor] setFill];

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, right, bottom);
    CGContextAddLineToPoint(context, right,top);
    CGContextAddLineToPoint(context,left, top);
    CGContextAddLineToPoint(context, left, bottom);
    CGContextAddLineToPoint(context, right, bottom);

    CGContextStrokePath(context);
    CGContextFillPath(context);

中风有效,我得到一个漂亮的绿色矩形,没有填充(或白色填充)。这是在 iOS 的 UIView 中。看起来很简单,它让我发疯!

4

3 回答 3

6

正确的做法是将绘图模式设置为同时包含填充和路径。

CGPathDrawingMode mode = kCGPathFillStroke;
CGContextClosePath( context ); //ensure path is closed, not necessary if you know it is
CGContextDrawPath( context, mode );

您可以使用CGContextFillPath()to 简单地进行填充,但它基本上只是CGContextDrawPath()自动调用CGContextClosePath()kCGPathFill用作CGPathDrawingMode. 您不妨始终使用CGContextDrawPath()并输入自己的参数来获得所需的填充/笔触类型。您还可以使用奇偶绘图模式之一在凸形路径中放置孔。

于 2012-09-10T19:47:16.633 回答
3

CGContextStrokePath上的文档:

Quartz 使用图形状态的线宽和描边颜色来绘制路径。作为调用此函数时的副作用,Quartz 会清除当前路径。

于 2012-05-11T14:59:41.883 回答
0

可能你应该在调用 CGContextFillPath之前调用CGContextClosePath

于 2012-05-11T15:07:31.983 回答