使用UIImage的UIBarButtonItem始终着色iOS 7
我试图添加一个UIBarButtonItem
包含UIImage
到UIToolbar
。 图像不断被着色,我不能把它显示为原来的彩色图像 – 我想要做的就是在UIBarButtonItem
逐字显示图像! 我按照iOS 7转换指南中的说明将图像呈现模式设置为UIImageRenderingModeAlwaysOriginal
。
UIImage *image = [UIImage imageNamed:@"myImage.png"]; image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; UIBarButtonItem *ratingImage = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:nil action:nil]; [toolbar setItems:[NSArray arrayWithObjects:ratingImage, nil] animated:YES];
有一件事要注意的是,我的应用程序的主UIWindow加载tintColor的时候正确加载…也许这不是重要的问题,但我想我会提到它。
我花了一个晚上试图弄清楚这一点。 你非常接近解决scheme。 诀窍是用渲染模式实例化UIImage。
而不是做:
UIImage *image = [UIImage imageNamed:@"myImage.png"]; image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
做这个:
UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
它的工作原理!
在我的情况下,我已经拖动导航栏到我在IB的viewcontroller,并添加BarButtonItem。 但是不要在IB中提供该图像。 做一个sockets,并为其分配UIImage(就像我们上面创build的那样):
[myCustomBarButtonItem setImage:image];
希望这对你有用。
对于Swift 2.1+,它看起来像这样:
let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
更新Swift 3
let image : UIImage? = UIImage(named:"myImage.png")!.withRenderingMode(.alwaysOriginal)
UIImageRenderingModeAlwaysOriginal也可以通过在XCode的Assets.xcassets“文件夹”中select图像并将“渲染为”下拉菜单设置为“原始图像”来设置。
如果您希望它适用于版本低于v7的iOS版本,则可能需要执行以下操作:
UIImage *image = [UIImage imageNamed:@"myImage.png"]; @try { image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; } @catch (NSException *exception) { }
由于imageWithRenderingMode:是一个iOS 7方法,如果您尝试使用较小的版本,则会发生exception。