web-dev-qa-db-fra.com

Swift 3: UIImage lorsqu'il est défini sur l'image du modèle et que la couleur de teinte modifiée n'affiche pas l'image

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:

Template image with green tint that does not work

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:

Template image with green tint that works

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.

16
leonardloo

Pour les images de modèle, l'arrière-plan doit être transparent - pas blanc.

29
Jon Rose

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.

17
Fogmeister