Objective C中的CGContext填充路径如何工作?

时间:2012-05-11 14:53:48

标签: objective-c ios cocoa-touch graphics cgcontext

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

    [[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);

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

3 个答案:

答案 0 :(得分:6)

正确的方法是将绘图模式设置为包括填充和路径。

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

您可以使用CGContextFillPath()进行填充,但基本上只有CGContextDrawPath()自动调用CGContextClosePath()并使用kCGPathFill作为CGPathDrawingMode。您也可以始终使用CGContextDrawPath()并输入您自己的参数来获取所需的填充/描边类型。您还可以使用其中一种偶数绘图模式在凸路径中放置孔。

答案 1 :(得分:3)

来自CGContextStrokePath上的文档:

  

Quartz使用图形状态的线宽和笔触颜色   画路径。当你调用这个函数时,作为副作用,Quartz   清除当前路径。

答案 2 :(得分:0)

在调用 CGContextFillPath

之前,您应该调用 CGContextClosePath