我有以下代码,它应该绘制一个描边和填充的矩形,但填充不会显示。
[[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中。看起来很简单,它让我疯了!
答案 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