我可以将一些图像分配给UIBarButton项目 - 在InterfaceBuilder中可以轻松地使用简单的线条图标。但是,当我指定一个全彩色图像时,它会使整个图像为色调的颜色,蓝色为默认值。如果我将色调设置为清除颜色,则图像会消失。我无法让它显示图像。
我知道可以通过创建UIImageView来显示图像,制作按钮并将UIImageView分配给按钮,但是当其他图像正确显示时,您必须为某些图像解决所有这些问题,这似乎很奇怪只需在IB中分配图像属性。
有没有人知道一种显示彩色图像的方法,而无需经历创建视图等的整个过程。
类似于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];
答案 0 :(得分:2)
问题是渲染模式。创建SaveChnages
的实例时,其UIImage
属性的默认值为renderingMode
。现在,从这个渲染模式的documentation:
对使用图像的上下文使用默认渲染模式。
对于UIImageRenderingModeAutomatic
渲染模式,默认为UIBarButtonItem
,根据源图像的Alpha通道创建实际显示的图像。
您要做的是将图片的渲染模式更改为UIImageRenderingModeAlwaysTemplate
UIImageRenderingModeAlwaysOriginal
这可确保显示原始图像,而不是从Alpha通道创建的图像。
答案 1 :(得分:1)
我会做这样的事情:
UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
[b setFrame:CGRectMake(0, 0, 36, 36)];
[b addTarget:self action:@selector(randomMsg) forControlEvents:UIControlEventTouchUpInside];
[b setImage:[UIImage imageNamed:@"headshot-32.png"] forState:UIControlStateNormal];
UIBarButtonItem * roundBtn = [[UIBarButtonItem alloc] initWithCustomView:b];
self.navigationItem.leftBarButtonItems = @[roundBtn];
答案 2 :(得分:0)
好吧,有一件事在viewWillAppear中以编程方式生成UIBarButtonItem
UIButton *ArrowSnapCapture = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 40 , 35)];
[ArrowSnapCapture setImage:[UIImage imageNamed:@"ArrowIcon"] forState:UIControlStateNormal];
[ArrowSnapCapture addTarget:self action:@selector(CaptureSS) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:Notification];
[self.navigationItem setRightBarButtonItem:rightBarButtonItem];
rightBarButtonItem=nil;