蓝色渐变图像被错误地拉​​伸为 UIButton 的橙色渐变图像

Posted

技术标签:

【中文标题】蓝色渐变图像被错误地拉​​伸为 UIButton 的橙色渐变图像【英文标题】:a blue gradient image incorrectly stretched into orange gradient image for UIButton 【发布时间】:2012-04-16 07:03:45 【问题描述】:

我有一个蓝色的渐变图像。它是 100 像素(高度)x 1 像素(宽度)。现在我尝试将它用作突出显示状态的背景图像。但不知何故,它在运行时变成了橙色。这里可能有什么问题?按钮的高度是40px,所以我在设置它之前做了一个调整大小

UIImage *image = [UIImage imageNamed:@"pressed.png"];
UIImage *stretchedImage = [[UIImage imageWithImage:image scaledToSize:frame.size] stretchableImageWithLeftCapWidth:0 topCapHeight:0];
[button setBackgroundImage:stretchedImage forState:UIControlStateHighlighted];

【问题讨论】:

你也可以发布pressed.png图片吗? 对不起,我们对图片有财产保护,不能分享出去。 您是否尝试过自定义 UIButton 对象类型而不是 roundRect? 你能在你可以分享的另一个图像上重新创建效果吗?如果不出意外,您可能会找出问题所在。 感谢 Chris,原来我们得到了一张破碎的图片。 【参考方案1】:

有几种可能的解释,按照可能性的大致降序排列:

1) 您的 scaledToSize 类别代码中有一个错误,它正在反转图像中字节的 RGB 顺序,将蓝色变为橙色。尝试不缩放图像,看看它是否是正确的颜色。无论如何,您实际上并不需要对其进行缩放,按钮背景图像已经在运行时被拉伸以适应。

2) 你的项目中有两个pressed.png 图像,可能在不同的文件夹中所以你没有注意到,但是由于编译器在构建时将所有图像转储到同一个文件夹中,所以你的蓝色pressed.png 正在被橙色pressed.png覆盖。在磁盘上搜索您的项目,看看是否是这种情况。

3) 您之前有一个名为pressed.png 的橙色图像,当您构建应用程序时,由于某些缓存问题,它使用的是旧图像。尝试干净的构建,重置您的模拟器并从设备上删除应用程序。

4) 你有一个pressed@2x.png 版本的橙色图像。当您在设备上运行时,它使用的是视网膜版本,因此看起来有所不同。

5) 您的 PNG 以某种方式损坏 - 删除它并从头开始重新创建。我之前遇到过只有 1 像素宽的图片的问题,所以如果是这种情况,请尝试使其更宽。

【讨论】:

以上是关于蓝色渐变图像被错误地拉​​伸为 UIButton 的橙色渐变图像的主要内容,如果未能解决你的问题,请参考以下文章

针对不同状态更改 UIButton 的渐变

目标 C. 这个 UIButton 图像有啥问题?

圆角渐变 UIButton iOS

子类化 UIButton 并将 UILabel 添加到视图层次结构会导致 currentImage 压缩

UIButton ImageView 仅显示颜色填充

渐变层未显示在 UIButton 上