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
画像は下の正方形のブロックとして表示されます。
ただし、面白いのは、これが常に起こるとは限らないことです。アセット内の他のいくつかの画像を使用すると、機能し、色合いが緑色に変わります。
一貫性のない動作がここにあるのはなぜですか?そして一般的に、どのようにテンプレート画像をアセットに追加し、プログラムでその色を変更できますか?画像をテンプレート画像に変更しないと機能することはわかりますが、画像の色合いを変更したいので、それはできません。
テンプレート画像の場合、背景は白ではなく透明である必要があります。
テンプレート画像は、画像の不透明度プロパティを使用して機能します。
背景が透明な画像がある場合、透明な背景は透明のままで、画像の残りの部分はすべて小さな色に変更されます。
画像に透明な背景がない場合。背景が白いとします。次に、画像全体が濃淡の色に変更されます(例で見ているように)。
これを修正するには、その画像に透明な背景を与える必要があります。
また、そのコードが不要であることも注目に値します。テンプレートモードでのみ画像を使用している場合は、アセットカタログでレンダリングモードを選択するだけです。