2014-03-24 34 views
0

我需要在CGContext中绘制一系列路径作为块。这些路径是由用户绘制的,所以我无法确定他们的方向。我用下面的代码段,以绘制的路径:CGContextRef和偶奇填充规则

CGContextSaveGState(context); 
UIBezierPath *fillPath = [ UIBezierPath bezierPath ]; 

for (UIBezierPath *path in arrayOfPaths) { 
    [ fillPath appendPath:path ]; 
} 

CGContextAddPath(context, fillPath.CGPath); 
CGContextSetFillColorWithColor(context, [[UIColor GreenColor ] colorWithAlphaComponent:0.3 ].CGColor); 
CGContextFillPath(context); 

然而,如果路径是在相反方向创建的结果绘图似乎产生的图,其中所述重叠部分被敲除,相当于设置偶数 - 奇数的规则为是。

有什么建议吗?

回答

0

您可以用CGContextSaveGState/CGContextRestoreGState指令来包围填充每条路径的线条。这样你就可以从头开始,即。用干净的路径堆叠在每个填充物上。

编辑:我有一个很好的包装功能部件此:

void CGContextBlock(CGContextRef ctx, void (^block)()) 
{ 
    CGContextSaveGState(ctx); 
    block(); 
    CGContextRestoreGState(ctx); 
} 

使用它这样的:

CGContextSetFillColorWithColor(context, [UIColor GreenColor].CGColor); 
for (UIBezierPath *path in arrayOfPaths) 
{ 
    CGContextBlock(context, ^{ 
     CGContextAddPath(context, path.CGPath); 
     CGContextFillPath(context); 
    }); 
} 
+0

我不认为这会工作,因为我需要做块颜色是半透明的,在我最初的问题中我忘了提及。这将导致每次形状被绘制到前一个,因此你不会得到一个平坦的半透明颜色 – reza23