iPhone - UIView的backgroundColor - 是否可以使用带透明度的png图片?

13

我正在设置我的UIView(在UIViewController中)的背景颜色,如下所示:

myView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"myTransparentBG.png"]];

我甚至尝试过对[myView setOpaque:NO];进行调整,但图像并没有显示为透明。它有一个黑色的背景。我能否通过编程方法来解决这个问题?否则,我们应该如何设置视图的透明背景?

这似乎是一个之前应该已经被问过的问题,但我找不到答案。

3个回答

32

当使用透明图案时,需设置backgroundColor属性后,还需将视图和其层的opaque属性都设置为NO。以下是示例:

UIView* paperView = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,700)];
paperView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"paper.png"]];

[paperView.layer setOpaque:NO];
paperView.opaque = NO;

啊哈,这就是正确的答案。我没有设置图层的不透明属性。谢谢! - ultravelocity
1
有趣的是,在设置背景图像之后,您必须设置不透明属性。这必须是渲染引擎的一部分。 - Sam Stewart
谢谢你,Sam。我也遇到了同样的问题。此外,这段代码片段的最后两行做的是相同的事情。 - titaniumdecoy
非常感谢...我已经寻找这个很久了。再次感谢。 - Shraddha
对我来说,这是最好的答案之一。 - BufferStack

0

我从未真正尝试过这个,但以下是我的建议。

将 UIView 的 .backgroundColor 设置为 [UIColor clearColor]。然后在 UIView 的子视图堆栈中放置一个包含您的 PNG 的 UIImageView 作为“最低”的项目。确保 UIImageView 的背景颜色也是透明的。


实际上,没有太多理由保留UIView,我最终只使用了UIImageView,然后将所有其他元素作为其子视图添加,效果非常好。 - RyanJM
@RyanJM 哦,是的。有时我会忘记UIImageView作为UIView子视图可以愉快地容纳子视图... - Dan Ray

-1
使用以下代码:myView.backgroundColor = [UIColor clearColor];
这将把它设置为透明背景。

你明白吗?我想让这张图片作为背景。视图中还有其他的UI元素。 - RyanJM
如果将UIView的颜色设置为clearColor,则它将变为透明。根据图像和其他视图的排序方式,您可以对它们进行调整。 - Istvan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接