1

我需要将 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);

但是,如果路径是在相反方向创建的,则生成的图形似乎会生成重叠部分被敲除的图形,相当于将奇偶规则设置为是。

有什么建议么?

4

1 回答 1

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);
    });
}
于 2014-03-24T11:21:40.877 回答