Modifier UIImage renderingMode à partir d'une table de montage séquentiel/fichier xib
Est-il possible de modifier un UIImage
's renderingMode
à partir d'un storyboard ou xib éditeur?
Le but est d'appliquer tintColor
à la UIImageView
objet.
Vous devez vous connecter pour publier un commentaire.
Voici comment vous pouvez le faire dans .xib ou storyboard fichiers:
(Obj-C) Créer une catégorie sur
UIImageView
:(Swift 4) Créer une extension pour
UIImageView
:Puis dans l'Identité de l'Inspecteur dans le fichier xib, ajouter un moteur d'exécution de l'attribut:
tintColor
travail surUIImageView
s. Au lieu de coder en dur2
, je voudrais définir ma propre valeur (par exemple unBOOL
avec une valeur deYES
) et monsetImageRenderingMode:
méthode serait- (void)setImageRenderingModeToTemplate:(BOOL)asTemplate { UIImageRenderingMode rMode = asTemplate ? UIImageRenderingModeAlwaysTemplate : UIImageRenderingModeAutomatic; self.image = [self.image imageWithRenderingMode:rMode]; };
@IBInspectable
de la propriété à la fonction pour le fixerVous pouvez définir l'image mode de rendu pas dans le
.xib
fichier, mais dans un.xcassets
bibliothèque.Après l'ajout d'une image à une bibliothèque de biens, sélectionnez l'image et ouvrir les attributs de l'inspecteur sur le côté droit de Xcode. Trouver l'attribut "Rendu" et à "modèle".
Après la définition d'une image du mode de rendu, vous pouvez ajouter une teinte de couleur à la
UIImageView
dans un.xib
ou.storyboard
fichier pour ajuster la couleur de l'image.Ceci définit la propriété sur l'image où il est utilisé plutôt que dans une seule interface builder fichier, mais dans presque tous les cas (que j'ai rencontré) c'est le comportement que vous souhaitez.
Quelques choses à noter:
UIImageView
. Je n'ai pas regardé dans cette profondément.UIKitComponents
tels que des images dansUIButton
's etUIBarButtonItem
's.UIImageView
, de sorte que la teinte de la couleur n'est pas toujours indiqué lors de l'exécution de l'application.UIImageView
s'il s'agit de voir si c'est plus fiable.tint
de travail, le fichier image doit être en noir et transparent (b&w)À l'aide du modèle mode de rendu avec une UIImageView dans un storyboard ou xib est très bogué, à la fois sur iOS 7 et iOS 8.
Sur iOS 7
La UIImage n'est pas correctement décodé à partir de la table de montage séquentiel/xib. Si vous examinez les
imageView.image.renderingMode
propriété dans leviewDidLoad
méthode, vous remarquerez que c'est toujoursUIImageRenderingModeAutomatic
, même si vous le réglez à Rendu en tant Que Modèle de l'Image dans votre xcassets fichier.Pour contourner le problème, vous devez définir manuellement le mode de rendu:
Sur iOS 8
La UIImage est correctement décodées et ses
renderingMode
propriété reflète ce qui a été choisie dans le xcassets fichier, mais l'image n'est pas teinté.De solution de contournement, vous avez deux options:
tintColor
propriété dans le Défini par l'Utilisateur Runtime Attributs au lieu de les Attributs de l'inspecteur de volet.ou
Vous pouvez choisir le service de votre choix, à la fois correctement la teinte de l'image.
(Si vous compilez avec Xcode 6.2, il suffit de faire
self.imageView.tintColor = self.imageView.tintColor;
est suffisant, mais cela ne fonctionne plus si vous compilez avec Xcode 6.3)Conclusion
Si vous avez besoin d'un soutien à la fois iOS 7 et iOS 8, vous aurez besoin des deux solutions de contournement. Si vous n'avez qu'à appuyer iOS 8, une seule solution de contournement est nécessaire.
Réglage de l'imageView RenderingMode d'utiliser la teinte de la couleur dans la table de montage séquentiel peut être réduit à un one-liner:
Puis, l'image et la couleur de teinte peuvent tous être réglés dans le Storyboard.
Vous pouvez corriger .xib des problèmes avec une extension:
Source: https://gist.github.com/buechner/3b97000a6570a2bfbc99c005cb010bac
Incroyable, ce bug a été autour de pour comme 4 ou 5 ans maintenant.
Vous cann pas mis
renderingMode
soit à partir destoryboard
ouxib
. Il peut accès par programmation.ex:
UIImage *selectedImage = [unSeletedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
Set nuance de couleur & Classe dans la table de montage séquentiel.
Il est très facile à fixer
Viens de créer une classe UIImageViewPDF et à utiliser dans votre storyboard
Une autre solution est de créer un
UIImageView
sous-classe:Alors juste la classe dans Interface Builder pour
TemplateImageView
.Façon Simple à partir de Storyboard:
Fonctionne très bien sur iOS 10 et Swift 3
Dans iOS 9 réglage de la
tintColor
propriété dans Interface Builder est encore buggé.Noter qu'une solution de travail, outre l'écriture de lignes de modifier directement
ImageView
propriétés est de définir le Rendu: Modèle de l'Image dans le catalogue, et de les appeler par exemple:J'ai résolu ce problème en ajoutant de l'exécution de l'attribut
tintColor
dans interface builder.REMARQUE : Vous devez encore définir votre image de manière à être rendu comme un modèle de l'image dans vos Images.xcassets fichier.
Si vous créez un IBOutlet vous pouvez le modifier dans votre awakeFromNib méthode comme si...
Tandis que @Moby de réponse est plus correct - ce qui pourrait être plus concis.
Fou ce bug est toujours en iOS 12.1! Pour les storyboards/xibs: Ajout d'une balise à l'UIImageView peut être une solution rapide.
Swift 4.2