使自定义图像尊重tintColor属性iOS

时间:2014-01-02 20:41:51

标签: ios objective-c tintcolor

我不得不想象这已被问过几次,但我不能正确地写出我的问题。

我有我自己在photoshop中制作的自定义图像,它被设置为按钮的图像属性。这里正常显示:

enter image description here

背景是透明的,但它是44x44,三个点是一个88x88像素的.png文件。所以,如果我做这样的事情:

self.theButton.tintColor = [UIColor redColor];

图像仍然显示为白色。我不是交易设计师,所以我似乎不知道如何正确保存或设置文件以使它们尊重tintColor属性。在photoshop中,我通常使用“Save for web”保存这些内容。

由于

3 个答案:

答案 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)

他们是两种设置模板图像的方法

1.使用Images.assets

enter image description here

2.使用代码

/DUNICODE /D_UNICODE