IOS/Objective-C:将自定义图像分配给UIBarButtonItem
我能够为UIBarButton项分配一些图像——在InterfaceBuilder中很容易地分配简单的线条图标。但是,当我指定全彩图像时,它会使整个图像成为色调的颜色,默认值为蓝色。如果我将“淡色”设置为“清除颜色”,图像将消失。我无法让它显示图像 我知道可以通过创建UIImageView、制作按钮并将UIImageView指定给按钮来显示图像,但奇怪的是,当其他图像仅通过在IB中指定image属性来正确显示时,您必须为某些图像设置所有这些麻烦 有没有人知道一种方法可以显示彩色图像,而不必经历创建视图等繁琐的过程 类似于btnItem.image=@“myimage.png” 我想避免的路很长IOS/Objective-C:将自定义图像分配给UIBarButtonItem,ios,objective-c,uiimage,uibarbuttonitem,Ios,Objective C,Uiimage,Uibarbuttonitem,我能够为UIBarButton项分配一些图像——在InterfaceBuilder中很容易地分配简单的线条图标。但是,当我指定全彩图像时,它会使整个图像成为色调的颜色,默认值为蓝色。如果我将“淡色”设置为“清除颜色”,图像将消失。我无法让它显示图像 我知道可以通过创建UIImageView、制作按钮并将UIImageView指定给按钮来显示图像,但奇怪的是,当其他图像仅通过在IB中指定image属性来正确显示时,您必须为某些图像设置所有这些麻烦 有没有人知道一种方法可以显示彩色图像,而不必经历创
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];
我会这样做:
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];
我会这样做:
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];
问题在于渲染模式。创建
UIImage
实例时,其renderingMode
属性的默认值为uiimagerrenderingmodeautomatic
。现在,从该渲染模式的开始:
对使用图像的上下文使用默认渲染模式
对于uiBarButtonim
渲染模式,默认为UIImageRenderingModeAlwaysTemplate
,它基于源图像的alpha通道创建实际显示的图像
您要做的是将图像的渲染模式更改为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通道创建的图像。问题在于渲染模式。创建
UIImage
实例时,其renderingMode
属性的默认值为uiimagerrenderingmodeautomatic
。现在,从该渲染模式的开始:
对使用图像的上下文使用默认渲染模式
对于uiBarButtonim
渲染模式,默认为UIImageRenderingModeAlwaysTemplate
,它基于源图像的alpha通道创建实际显示的图像
您要做的是将图像的渲染模式更改为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通道创建的图像。好的,做一件事,以编程方式在视图中显示UIBarButtonim
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;
好的,做一件事,让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;
好啊我认为没有办法改变IB中的渲染模式?不是直接改变,但是你可以检查一下,我认为你需要创建一个新的图像,使用alwaysoriginal渲染模式作为。渲染模式属性是readonlyOk。我认为没有办法在IB中更改渲染模式?不是直接更改,但是您可以查看我认为您需要创建一个新图像,将alwaysoriginal渲染模式作为。渲染模式属性为只读