web-dev-qa-db-ja.com

UIImageのUIBarButtonItemが常にiOS 7に色付けされている

UIBarButtonItemを含むUIImageUIToolbarに追加しようとしています。画像に色が付けられ続け、元の色付き画像として表示することができません-したいのは、UIBarButtonItem!に逐語的に画像を表示することだけです! iOS 7移行ガイドの指示に従って、画像レンダリングモードをUIImageRenderingModeAlwaysOriginalに設定します。

UIImage *image = [UIImage imageNamed:@"myImage.png"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

UIBarButtonItem *ratingImage = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:nil action:nil];

[toolbar setItems:[NSArray arrayWithObjects:ratingImage, nil] animated:YES];

注意すべきことの1つは、アプリのメインUIWindowのtintColorをロード時に設定することです...これは私の問題に関しては重要ではないかもしれませんが、言及すると思いました。

63
DiscDev

私もこれを理解しようとして夜を過ごしました。ソリューションに非常に近かった。トリックは、UIImageをレンダリングモードでインスタンス化することです。

代わりに:

 UIImage *image = [UIImage imageNamed:@"myImage.png"];
 image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

これを行う:

 UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

そしてそれは動作します!

私の場合、私はナビゲーションバーをIB内のViewControllerにドラッグし、BarButtonItemを追加しました。ただし、IBでアイテムに画像を提供しないでください。アウトレットを作成し、これを実行して(上記で作成したように)UIImageを割り当てます。

[myCustomBarButtonItem setImage:image];

これがあなたのために働くことを願っています。

173
ScorpionKing2k5

UIImageRenderingModeAlwaysOriginalは、XCodeでAssets.xcassets「folder」の画像を選択し、「Render as」ドロップダウンを「Original image」に設定することでも設定できます。

10
andlin

Swift 2.1+の場合、次のようになります。

let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

更新済みSwift

let image : UIImage? = UIImage(named:"myImage.png")!.withRenderingMode(.alwaysOriginal)
9
jesses.co.tt

受け入れられる答えは問題ありませんが、UIBarButtonItemをストーリーボードまたはxibに配置した場合、次のことができます。

  • 画像が存在する資産カタログに移動します
  • 画像を選択
  • 属性インスペクターに移動します(cmd-opt-4)
  • 「レンダリング」を「オリジナル画像」に設定します

これを行うのは、この画像のallインスタンスを色付けせずに表示する場合のみです。

enter image description here

0
John Scalo