Dans Swift 3, lorsque j'essaie de changer par programme la couleur d'une image chargée à partir d'actifs comme ceci:
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
L'image apparaît sous la forme d'un bloc carré ci-dessous:
Cependant, le plus drôle, c'est que cela ne se produit pas toujours. Avec quelques autres images dans les actifs, cela fonctionne et change la teinte en vert:
Pourquoi y a-t-il un comportement incohérent ici? Et en général, comment puis-je ajouter une image de modèle aux actifs et pouvoir modifier par programme sa couleur? Je me rends compte que lorsque je ne change pas l'image en image modèle, cela fonctionne, mais je ne peux pas le faire parce que je veux changer la teinte de l'image.
Pour les images de modèle, l'arrière-plan doit être transparent - pas blanc.
Les images de modèle fonctionnent en utilisant la propriété d'opacité d'une image.
Si vous avez une image avec un fond transparent, le fond transparent reste transparent et TOUT le reste de l'image est changé en la couleur minuscule.
Si votre image n'a pas de fond transparent. Disons qu'il a un fond blanc. Ensuite, l'image entière sera changée en couleur de teinte (comme vous le voyez dans votre exemple).
Pour résoudre ce problème, vous devez donner à cette image un arrière-plan transparent.
Il convient également de noter que vous n'avez pas besoin de ce code. Si vous utilisez une image uniquement en mode modèle, sélectionnez simplement le mode de rendu dans le catalogue d'actifs.