UIBarButtonItemの作成時にInitWithImageを使用して、UIToolButtonに追加されるUIBarButtonItemに画像を設定する方法を知りたいです。
私は次のことをしていますが、画像がUIToolbar上にあるはずの空白の空白を作成します
UIImage *image = [UIImage imageNamed:@"6.png"];
UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];
ありがとうございました!
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];
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(_:)))
設定しようとします
UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];
バーに表示される画像は、この画像から派生しています。この画像が大きすぎてバーに収まらない場合は、収まるように拡大縮小されます。通常、ツールバーとナビゲーションバーの画像のサイズは20 x 20ポイントです。ソース画像のアルファ値は画像の作成に使用され、不透明な値は無視されます。
つまり、UIBarButtonアイテムは画像の色を無視し、現在のバースタイルに従って色を変更します。画像を表示する唯一の方法は、画像がさまざまなアルファ値を使用して描画される場合です。画像のすべてのピクセルのアルファ値は1であるため、すべてのピクセルは最大の輝度で描画され、空白ができます。
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)
バーボタンアイテムを作成したら、次を実行します。
systemItem1.image = [systemItem1.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarbuttonItem initWithImageは、指定されたImageでバーボタンを作成しません。指定された画像を使用してUIBarbuttonのパターンを作成します。指定された画像が透明でない場合、画像のサイズを持つ指定された色合いのバーボタンが表示されます。画像に不透明な部分がある場合、デフォルトのUIBarButtonSystemItemBookmarksのような不透明な部分に濃淡色が塗りつぶされます。不透明な境界と透明な内側があります。
あなたの場合、titncolorは白であるため、白が表示されます。
私もこの問題を抱えていたので、アルファチャンネル付きのPNGファイルを使用して解決しました。私は簡単なモックアップをしようとしていて、ボタンのデフォルト色の背景にjpgファイルを持つ戻るボタンを追加しました。白い長方形ができました。しかし、透明な背景に矢印を作成してpngファイルとして保存すると、うまくいきました。
あなたと同じコードを書きます。プロジェクトに画像を追加するときは、ビルド対象のtargetに追加されていることを確認してください。
システム標準アイコン を使用してUIBarButtonItem
を作成できます- initWithBarButtonSystemItem:target:action:
例えば:
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(YOUR_METHOD:)];