2

绘制到具有不同颜色重叠的相同形状时出现问题。当启用抗锯齿时,生成的透明像素会渗出并导致此图像中的伪影。她的顺序是画一个红色的圆圈,画一个蓝色的三角形,然后画一个红色的三角形。

这个问题可以通过禁用抗锯齿来解决,但结果是难看的锯齿状边缘。

是否有例如解决方案,我可以对图形上下文进行追溯抗锯齿或渲染到图像并在该图像上进行抗锯齿。或者其他任何可以帮助我绘制边缘清晰的重叠形状的东西。

这是重新创建问题的代码

-(void)drawRect:(CGRect)rect
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextClearRect(currentContext, rect);
CGContextSetAllowsAntialiasing(currentContext, YES);

//// Color Declarations
UIColor* color = [UIColor redColor];
UIColor* color2= [UIColor blueColor];

//// Oval Drawing
UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: rect];
[color setFill];
[ovalPath fill];

//// triangle Drawing
UIBezierPath* trianglePath = [UIBezierPath bezierPath];
[trianglePath moveToPoint: CGPointMake(0, 0)];
[trianglePath addLineToPoint: CGPointMake(rect.size.width, rect.size.height)];
[trianglePath addLineToPoint: CGPointMake(0, rect.size.height)];
[trianglePath addLineToPoint: CGPointMake(0, 0)];
[trianglePath closePath];
[color2 setFill];
[trianglePath fill];

[color setFill];
[trianglePath fill];
}
4

1 回答 1

1

问题在于,使用 drawRect,您基本上是在图像上绘图,并且每个绘图方法都呈现在前一个之上。没有剔除。

要真正解决这个问题,您可能希望使用 OpenGL,其中只有一个渲染通道,因此不会渲染隐藏的对象。

于 2013-03-29T13:46:36.600 回答