我需要在CGContext中绘制一系列路径作为块。这些路径由用户绘制,因此我无法确定其方向。我使用以下代码片段绘制路径:
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 :(得分: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);
});
}