web-dev-qa-db-ja.com

initWithImage:(UIImage *)imageを使用してUIBarButtonItemに画像を追加します

UIBarButtonItemの作成時にInitWithImageを使用して、UIToolButtonに追加されるUIBarButtonItemに画像を設定する方法を知りたいです。

私は次のことをしていますが、画像がUIToolbar上にあるはずの空白の空白を作成します

UIImage *image = [UIImage imageNamed:@"6.png"];

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];

ありがとうございました!

58
Shumais Ul Haq

Facebookロゴからツールバーボタンを作成する例を次に示します。画像(xCodeに既に追加されているファイル)へのポインターを作成し、カスタムボタンを作成し、画像に合わせてボタンのサイズを変更し、ボタンの画像を設定し、ボタンビューからツールバーボタンを作成します。

UIImage *faceImage = [UIImage imageNamed:@"facebook.png"];
UIButton *face = [UIButton buttonWithType:UIButtonTypeCustom];
face.bounds = CGRectMake( 0, 0, faceImage.size.width, faceImage.size.height );
[face setImage:faceImage forState:UIControlStateNormal];
UIBarButtonItem *faceBtn = [[UIBarButtonItem alloc] initWithCustomView:face];
70
Kwexi

IOS 7以降では、次のことを行います。

Objective-C

 UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
 UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD:)];

Swift 2.

 let image = UIImage(named: "myImage")?.imageWithRenderingMode(.AlwaysOriginal)
 let button = UIBarButtonItem(image: image, style: .Plain, target: self, action: #selector(YOUR_METHOD(_:)))

Swift 3.

let image = UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal)
let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(YOUR_METHOD(_:)))
66
Vahan

設定しようとします

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];
41
Steven David

IBarButtonItemのドキュメント から:

バーに表示される画像は、この画像から派生しています。この画像が大きすぎてバーに収まらない場合は、収まるように拡大縮小されます。通常、ツールバーとナビゲーションバーの画像のサイズは20 x 20ポイントです。ソース画像のアルファ値は画像の作成に使用され、不透明な値は無視されます。

つまり、UIBarButtonアイテムは画像の色を無視し、現在のバースタイルに従って色を変更します。画像を表示する唯一の方法は、画像がさまざまなアルファ値を使用して描画される場合です。画像のすべてのピクセルのアルファ値は1であるため、すべてのピクセルは最大の輝度で描画され、空白ができます。

18
Tim Bowen

In Swift

最初の解決策

let img = UIImage(named: "picture")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let leftBarButtonItem = UIBarButtonItem(image: img, style: UIBarButtonItemStyle.Plain, target: self, action: nil)
self.navigationItem.leftBarButtonItem = leftBarButtonItem

2番目のソリューション

let img = UIImage(named: "picture")!
let imgWidth = img.size.width
let imgHeight = img.size.height
let button = UIButton(frame: CGRect(x: 0, y: 0, width: imgWidth, height: imgHeight))
button.setBackgroundImage(img, forState: .Normal)
button.addTarget(self, action: nil, forControlEvents: UIControlEvents.TouchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)
12
King-Wizard

バーボタンアイテムを作成したら、次を実行します。

systemItem1.image = [systemItem1.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
2
alex1704

UIBarbuttonItem initWithImageは、指定されたImageでバーボタンを作成しません。指定された画像を使用してUIBarbuttonのパターンを作成します。指定された画像が透明でない場合、画像のサイズを持つ指定された色合いのバーボタンが表示されます。画像に不透明な部分がある場合、デフォルトのUIBarButtonSystemItemBookmarksのような不透明な部分に濃淡色が塗りつぶされます。不透明な境界と透明な内側があります。

あなたの場合、titncolorは白であるため、白が表示されます。

0
IOS Learner

私もこの問題を抱えていたので、アルファチャンネル付きのPNGファイルを使用して解決しました。私は簡単なモックアップをしようとしていて、ボタンのデフォルト色の背景にjpgファイルを持つ戻るボタンを追加しました。白い長方形ができました。しかし、透明な背景に矢印を作成してpngファイルとして保存すると、うまくいきました。

0
Kwexi

あなたと同じコードを書きます。プロジェクトに画像を追加するときは、ビルド対象のtargetに追加されていることを確認してください。

0
vladof81

システム標準アイコン を使用してUIBarButtonItemを作成できます
- initWithBarButtonSystemItem:target:action:

例えば:

[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(YOUR_METHOD:)];
0
yoAlex5