web-dev-qa-db-ja.com

Swift 3:テンプレート画像に設定し、色合いを変更するとUIImageに画像が表示されない

Swift 3、プログラムからアセットからロードされた画像の色を次のように変更しようとすると:

let imageView = UIImageView()
let image = UIImage(named: "imageFromAssets")?.withRenderingMode(.alwaysTemplate)
imageView.contentMode = .scaleAspectFit
imageView.tintColor = GREEN_UICOLOR // Change to custom green color
imageView.image = image

画像は下の正方形のブロックとして表示されます。

Template image with green tint that does not work

ただし、面白いのは、これが常に起こるとは限らないことです。アセット内の他のいくつかの画像を使用すると、機能し、色合いが緑色に変わります。

Template image with green tint that works

一貫性のない動作がここにあるのはなぜですか?そして一般的に、どのようにテンプレート画像をアセットに追加し、プログラムでその色を変更できますか?画像をテンプレート画像に変更しないと機能することはわかりますが、画像の色合いを変更したいので、それはできません。

16
leonardloo

テンプレート画像の場合、背景は白ではなく透明である必要があります。

29
Jon Rose

テンプレート画像は、画像の不透明度プロパティを使用して機能します。

背景が透明な画像がある場合、透明な背景は透明のままで、画像の残りの部分はすべて小さな色に変更されます。

画像に透明な背景がない場合。背景が白いとします。次に、画像全体が濃淡の色に変更されます(例で見ているように)。

これを修正するには、その画像に透明な背景を与える必要があります。

また、そのコードが不要であることも注目に値します。テンプレートモードでのみ画像を使用している場合は、アセットカタログでレンダリングモードを選択するだけです。

17
Fogmeister