gpt4 book ai didi

IOS/objective-C : Assign custom image to UIBarButtonItem

转载 作者:行者123 更新时间:2023-11-28 19:27:41 24 4
gpt4 key购买 nike

我能够将一些图像分配给 UIBarButton 项目——在 InterfaceBuilder 中很容易使用简单的线条图标。但是,当我分配一个全彩色图像时,它会使整个图像成为色调的颜色,默认值为蓝色。如果我将色调设置为清晰的颜色,图像就会消失。我无法让它显示图像。

我知道可以通过创建 UIImageView、制作按钮并将 UIImageView 分配给按钮来显示图像,但是当其他图像正确显示时,您必须为某些图像解决所有这些麻烦似乎很奇怪通过在 IB 中分配图像属性。

有没有人知道一种方法来显示彩色图像,而无需经历创建 View 等整个繁琐的过程。

类似于 btnItem.image = @"myimage.png";

很长的路我想避免...

UIImageView* v = [[UIImageView alloc] initWithFrame:CGRectMake(4, 0, 36, 36)];

UIImage *myImage = [UIImage imageNamed:@"headshot-32.png"];

v.image =myImage;
UIImage *scaledImage = [UIImage imageWithCGImage:[myImage CGImage] scale:(35) orientation:(myImage.imageOrientation)];
v.image=scaledImage;
v.layer.cornerRadius = v.frame.size.width / 2;
v.contentMode = UIViewContentModeScaleAspectFill;
v.clipsToBounds = YES;

UIBarButtonItem* roundBtn = [[UIBarButtonItem alloc] initWithCustomView:v];
self.navigationItem.leftBarButtonItems = @[roundBtn];

最佳答案

问题是渲染模式。创建 UIImage 实例时,其 renderingMode 属性的默认值为 UIImageRenderingModeAutomatic。现在,来自 documentation这种渲染模式:

Use the default rendering mode for the context where the image is used.

对于 UIBarButtonItem 渲染模式默认为 UIImageRenderingModeAlwaysTemplate,它根据源图像的 alpha channel 创建实际显示的图像。

您要做的是将图像的渲染模式更改为 UIImageRenderingModeAlwaysOriginal

UIImage *scaledImage = [UIImage imageWithCGImage:[myImage CGImage] scale:(35) orientation:(myImage.imageOrientation)];
scaledImage.renderingMode = UIImageRenderingModeAlwaysOriginal;
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithImage:scaledImage
style:UIBarButtonItemStylePlain
target:yourTarget
action:someSelector];

这确保显示原始图像,而不是从 alpha channel 创建的图像。

关于IOS/objective-C : Assign custom image to UIBarButtonItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50452178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com