我有一个UIView子类,其中drawRect被覆盖。绘图代码无法填满视图的整个区域。其中一些是透明的。但是当它在屏幕上绘制时,应该透明的是黑色。如何使其具有适当的透明度?

如果将backgroundColor设置为[UIColor clearColor],整个视图将消失。如果我将其设置为任何其他颜色,则黑色区域将变为该颜色。将opaque设置为NO具有相同的效果。如果我在drawRect的开头绘制一个透明矩形,如下所示:

[[UIColor clearColor] setFill];
UIRectFill( rect );

...然后又变黑了。我可以在上面的代码中使用另一种颜色,它绘制出该颜色。如果我使用部分透明的颜色,则可以看到黑色透出。

更新:我的视图具有透明度渐变可能是相关的。我尝试使用一个非常简单的UIView子类进行测试,该子类仅在其边界内绘制了一个蓝色矩形,并使其他所有内容保持透明。将该视图设置为opaque=NO将按预期方式呈现。

最佳答案

该视图的opaque必须设置为NO,而backgroundColor设置为[UIColor clearColor]。另外,使用了错误的混合模式。我们有:

CGContextSetBlendMode(context, kCGBlendModeSourceAtop);

我们需要:
CGContextSetBlendMode(context, kCGBlendModeDestinationOver);

绘图代码是由可输出代码的图形工具生成的,而他们的支持部门则发现由于一次错误的错误而生成了错误的混合常数。

10-05 20:22
查看更多