我正在尝试将包含UIBarButtonItem
的{{1}}添加到UIImage
。图像不断被着色,我无法将其显示为原始彩色图像 - 我想要做的就是在UIToolbar
中逐字显示图像!我按照iOS 7过渡指南中的说明将图像渲染模式设置为UIBarButtonItem
。
UIImageRenderingModeAlwaysOriginal
有一点需要注意的是,当我加载时,我为我的应用程序的主UIWindow设置了tintColor ...也许这对我的问题并不重要,但我想我会提到它。
答案 0 :(得分:173)
我花了一个晚上试图解决这个问题。你非常接近解决方案。 诀窍是使用渲染模式实例化UIImage。
而不是:
UIImage *image = [UIImage imageNamed:@"myImage.png"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
这样做:
UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
它有效!
在我的情况下,我将导航栏拖到IB中的viewcontroller,并添加了BarButtonItem。但是不要在IB中提供项目图像。做一个出口并通过这样做为它分配UIImage(就像我们在上面创建的那样):
[myCustomBarButtonItem setImage:image];
希望这适合你。
答案 1 :(得分:10)
UIImageRenderingModeAlwaysOriginal也可以通过在XCode中选择Assets.xcassets“文件夹”中的图像并将“渲染为”下拉菜单设置为“原始图像”来设置。
答案 2 :(得分:0)
可接受的答案很好,但是如果您将UIBarButtonItem
放在情节提要或xib中,则可以:
仅当您要显示此图像的所有个实例而不着色时,才执行此操作。
答案 3 :(得分:-4)
如果您希望它适用于低于v7的iOS版本,您可能需要这样:
UIImage *image = [UIImage imageNamed:@"myImage.png"];
@try {
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
} @catch (NSException *exception) {
}
由于imageWithRenderingMode:是一个iOS 7方法,如果您尝试使用较小版本,则会出现异常。