如何使用drawRect覆盖在UIView子类的某些区域获得透明度

时间:2013-04-29 20:29:32

标签: ios uiview core-graphics

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

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

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

......然后再次变黑。我可以在上面的代码中使用另一种颜色并绘制该颜色。如果我使用部分透明的颜色,我可以看到黑色显示。

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

2 个答案:

答案 0 :(得分:4)

视图的opaque必须设置为NObackgroundColor设置为[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;