我不得不想象这已被问过几次,但我不能正确地写出我的问题。
我有我自己在photoshop中制作的自定义图像,它被设置为按钮的图像属性。这里正常显示:
背景是透明的,但它是44x44,三个点是一个88x88像素的.png文件。所以,如果我做这样的事情:
self.theButton.tintColor = [UIColor redColor];
图像仍然显示为白色。我不是交易设计师,所以我似乎不知道如何正确保存或设置文件以使它们尊重tintColor属性。在photoshop中,我通常使用“Save for web”保存这些内容。
由于
答案 0 :(得分:12)
您正在寻找的是模板图像。
来自UIKit用户界面目录:
模板图片
在iOS 7中,您可以选择将应用中的任何图片视为 模板或模板图像。当你选择将图像视为一个 模板,系统忽略图像的颜色信息并创建 基于图像中的alpha值的图像模板(部分图像) alpha值小于1.0的图像被完全视为处理 透明)。然后可以使用tintColor将此模板重新着色 匹配您的用户界面的其余部分。
默认情况下,使用创建图像(UIImage) UIImageRenderingModeAutomatic。如果你有 UIImageRenderingModeAutomatic设置在您的图像上,它将被视为 基于其上下文的模板或原始。某些UIKit 元素 - 包括导航栏,标签栏,工具栏,分段 controls-自动将前景图像视为模板, 虽然他们的背景图像被视为原始图像。其他 元素 - 如图像视图和Web视图 - 将其图像视为 原稿。如果您希望始终将图像视为模板 无论上下文如何,设置UIImageRenderingModeAlwaysTemplate;如果你 希望您的图像始终被视为原始图像 UIImageRenderingModeAlwaysOriginal。
要指定图像的渲染模式,请先创建标准 图像,然后在该图像上调用imageWithRenderingMode:方法。
UIImage * myImage = [UIImage imageNamed:@“myImageFile.png”]; myImage = [myImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
答案 1 :(得分:8)
通过使用具有渲染模式UIImageRenderingModeAlwaysTemplate
的UIImage,您可以获得所需的结果。
UIImage *image = [UIImage imageNamed:@"Dots"];
UIImage *templateImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[theButton setImage:templateImage forState:UIControlStateNormal];
答案 2 :(得分:6)