2

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

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

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

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

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

4

2 回答 2

4

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

CGContextSetBlendMode(context, kCGBlendModeSourceAtop);

我们需要:

CGContextSetBlendMode(context, kCGBlendModeDestinationOver);

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

于 2013-04-30T16:26:56.167 回答
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;
于 2013-04-29T20:36:41.657 回答