簡體   English   中英

iOS / Objective-C:將自定義圖片分配給UIBarButtonItem

[英]IOS/Objective-C: Assign custom image to UIBarButtonItem

我能夠將一些圖像分配給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];

問題是渲染模式。 當創建的實例UIImage ,其renderingMode屬性具有默認值UIImageRenderingModeAutomatic 現在,從此渲染模式的文檔中:

對於使用圖像的上下文,請使用默認渲染模式。

對於UIBarButtonItem渲染模式默認為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通道創建的原始圖像。

我會做這樣的事情:

 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];

好吧,在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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM