【问题标题】:UIButton with transparent image background not drawing transparent具有透明图像背景的 UIButton 不透明
【发布时间】:2012-05-26 06:46:21
【问题描述】:

我遇到了一个奇怪的问题。我有一个UIButtonUIButtonTypeCustom

对于它的背景图片,我使用的是透明图片。问题是实际图像的透明度似乎不正确。奇怪的是它实际上是透明的,因为背景在按钮后面正确显示。

下面是按钮外观(左)和按钮外观(右)的示例。我截取了一张截图并将图像覆盖在 Photoshop 中的背景上,背景在图像中正确显示,而在左侧的实际按钮中却没有。值得注意的是,左侧 UIButton 上的辉光比插入背景时的实际图像更强烈。

这是我用来证明它确实具有透明度的图像:

这是我的代码:

UIButton *nextButton = [UIButton buttonWithType:UIButtonTypeCustom];
nextButton.backgroundColor = [UIColor clearColor];
nextButton.frame = CGRectMake(0, 0, 30, 30);
[nextButton setBackgroundImage:[[UIImage imageNamed:@"ButtonBackground.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:5] forState:UIControlStateNormal];

forState:UIControlStateHighlighted]; [self addSubview:nextButton];

我在其他地方使用了完全相同的图像进行绘制,透明度没有问题。

更新:添加其他透明图像同样会增加 alpha 的强度。虽然它们是透明的,但它们看起来更暗,因此透明度更低。同样,在其他地方也能完美运行。

更新 2: 更糟糕的是,我刚刚创建了一个新项目,使用从另一个项目中拖动的完全相同的图像,创建了一个按钮,并且按钮正确显示没有问题。多么令人讨厌!

【问题讨论】:

  • 您是否尝试过设置图像属性而不是背景图像属性?那有什么区别吗?
  • 查看下面的对话。
  • 您可能只需要一个干净的构建。您一定有一张不太透明或不透明的旧图像,并将其更改为新图像,并且保留了对旧图像的引用。出于某种原因,XCode 似乎粘在已删除的文件上。
  • 如果您在 XCode 项目中更改了图像或文件,清理项目总是一个好主意,它应该更新所有内容。尝试清理您的旧项目,看看会发生什么。
  • 基于更新2:尝试:1)xcode - 清理项目,2)模拟器 - 重置内容和设置或删除应用程序 3)设备 - 删除现有应用程序

标签: ios uiimage uibutton


【解决方案1】:

您不必将背景颜色设置为透明。另外,请尝试删除图像上的可拉伸调用。

另外,您应该设置图像,而不是背景图像。

如果这些都没有帮助,那么 Apple 可能只是不正确地渲染了您的图像。尝试创建一个 CALayer 并将其内容设置为您的图像,看看它是否正常工作。

【讨论】:

  • 你不能在 UIButton 上拉伸图像,所以我必须设置背景图像,应该没问题。无论如何,任何一个都解决不了。
  • 嗯。我以前从来没有遇到过这个问题。为什么不能以适当的大小重新创建图像?或者只是在将图像添加到按钮之前通过在代码中缩放图像来重新创建它。在将其添加到按钮之前尝试对其进行缩放,然后将其作为图像而不是背景图像添加到按钮中。
  • 您确定图片与您在 Photoshop 中使用的图片相同吗?您是否尝试过将图像从 XCode 拖入 Photoshop 以确保添加到项目中的图像完全相同?
  • 是的,100% 确定。上图是屏幕截图,右侧是叠加的图像,左侧是具有完全相同图像的按钮。
  • 好吧,希望有人能弄清楚。我最好的猜测是苹果由于某种原因无法正确渲染您的图像数据,但我以前从未遇到过透明胶片的问题。您始终可以在不使用透明胶片的情况下导入它,然后编辑该图层以降低其不透明度。
【解决方案2】:

试试这个

    UIButton *nextButton = [UIButton buttonWithType:UIButtonTypeCustom];

    nextButton.frame = CGRectMake(0, 0, 30, 30);

    nextButton.alpha=0.5f;

    [nextButton setBackgroundColor:[UIColor clearColor]];

    [nextButton setOpaque:NO];

    [nextButton setBackgroundImage:[UIImage imageNamed:@"ButtonBackground.png"] 
                          forState:UIControlStateNormal];

【讨论】:

  • 是的,设置 alpha 有助于但不能解决我看到的问题,即在背景中以看似更高的强度绘制图像。
  • 再一次,它绘制的透明度与实际图像不同。
猜你喜欢
  • 2011-09-15
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多