我有一个UIView
子类,其中drawRect
被覆盖。绘图代码不会填满视图的整个区域;其中一些是透明的。但是当它在屏幕上绘制时,应该透明的是黑色。 如何使其透明?
如果我将backgroundColor
设置为[UIColor clearColor]
,则整个视图都会消失。如果我将其设置为任何其他颜色,则黑色区域会变为该颜色。将opaque
设置为NO
具有相同的效果。如果我在drawRect
的开头画一个透明的矩形,如下所示:
[[UIColor clearColor] setFill];
UIRectFill( rect );
......然后再次变黑。我可以在上面的代码中使用另一种颜色并绘制该颜色。如果我使用部分透明的颜色,我可以看到黑色显示。
更新:我的视图可能与透明度渐变有关。我尝试使用一个非常简单的UIView
子类进行测试,该子类只在其边界内绘制一个蓝色矩形,并使其他所有内容保持透明。将该视图设置为opaque=NO
会按预期进行渲染。
答案 0 :(得分:4)
视图的opaque
必须设置为NO
,backgroundColor
设置为[UIColor clearColor]
。此外,正在使用错误的混合模式。我们有:
CGContextSetBlendMode(context, kCGBlendModeSourceAtop);
我们需要:
CGContextSetBlendMode(context, kCGBlendModeDestinationOver);
绘图代码是由可以输出代码的图形工具生成的,他们的支持部门发现由于一个错误的错误而生成了错误的混合常量。
答案 1 :(得分:0)
尝试使用此行代码初始化您的视图。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setOpaque:NO];
[self.layer setOpaque:NO];
}
return self;
}
并且您可以设置alpha属性以使透明效果
self.alpha=0.3f;