使 UIView 前景透明

Posted

技术标签:

【中文标题】使 UIView 前景透明【英文标题】:Making UIView foreground transparent 【发布时间】:2015-12-09 13:23:32 【问题描述】:

我正在修改 ios 应用程序以允许额外的背景层。所有现有的叠加层都是UIImageViews,处理transparency就好了。

现有背景主要是UIView。我想将黑色背景更改为transparent,以便在后面放置另一个视图。它不起作用。最简单但无法正常工作的代码如下:

# import "TestUIView.h"
@implementation TestUIView

- (void)drawRect:(CGRect)rect 

    self.opaque = NO;
    [self setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0]];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 0,0,0,0);
    CGContextFillRect(context, rect);
// and here goes my code where I draw to the transparent background

@end

执行此操作时,会生成一个黑色矩形。我已将其背景设置为透明并用透明填充其前景。我需要做什么才能获得一个UIView,以便我可以在透明背景上进行绘制?

(而且我知道我可以更改整个视图的 alpha,这不是问题。我想要在真正透明的背景上进行不透明绘图)。

更新:它不在 setbackgroundcolor 中,我很欣赏它没有必要,所以不应该在那里,但如果它被注释掉,也会发生同样的事情。我不能在透明背景上画画;上面的代码显示我什至不能制作一个透明的矩形来绘制。

谢谢

【问题讨论】:

试试 yourview.backgroundColor = [[UIColor blackColor] colorWithComponent:0.5]; 如果 alpha 为 0,您将什么也看不到。那你期待什么? 默认 opaue 为 NO。 【参考方案1】:

默认情况下opaque 的值为NO。此外,如果您将 alpha 设置为 0,则视图对用户将完全不可见。如果您想要具有透明度,那么您需要具有大于 0 且小于 1 的 alpha 值。

另外,backgroundColor 属性用于设置视图的颜色,而不是自己绘制该颜色。

如果需要更改drawRect中的背景颜色,则必须自己绘制:

self.backgroundColor=yourColorWithSomeAlphaValue;//
[self.backgroundColor setFill];
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);

更多解释见here:

【讨论】:

搜索相同,这正是我正在寻找的。谢谢T先生 如果我注释掉我的 setBackgroundColor,会发生完全相同的事情。在那种情况下,我只是在绘制一个透明的矩形,除了它不透明,它是黑色的(它下面有一个 UIView,它被遮住了)。 对不起,我没听明白,发生了什么? 请不要使用code blocks 强调,仅用于代码。

以上是关于使 UIView 前景透明的主要内容,如果未能解决你的问题,请参考以下文章

使 UIView 透明

使 UIView 的一部分变得透明

为自定义活动指示器视图使 UIView 半透明

Java - 跟踪抽象形状的轮廓并使外部像素透明

通过保留透明区域和移除彩色区域来使用 UIImage 遮罩 UIView

使字体真棒图标背景透明[重复]