Est-il possible de modifier UIImage
les a renderingMode
depuis un storyboard ou un éditeur xib?
Le but est de s'appliquer tintColor
à l' UIImageView
objet particulier .
ios
ios7
xcode-storyboard
Artem Stepanenko
la source
la source
Vous pouvez définir le mode de rendu de l'image non pas dans le
.xib
fichier, mais dans une.xcassets
bibliothèque.Après avoir ajouté une image à une bibliothèque de ressources, sélectionnez l'image et ouvrez l'inspecteur d'attributs sur le côté droit de Xcode. Recherchez l'attribut «Rendu en tant que» et définissez-le sur «modèle».
Après avoir défini le mode de rendu d'une image, vous pouvez ajouter une couleur de teinte
UIImageView
dans un fichier.xib
ou.storyboard
pour ajuster la couleur de l'image.Cela définit la propriété sur l'image partout où elle est utilisée plutôt que dans un seul fichier de générateur d'interface, mais dans presque tous les cas (que j'ai rencontrés), c'est le comportement que vous souhaitez.
Quelques points à noter:
UIImageView
. Je n'ai pas examiné cela en profondeur.UIKitComponents
images telles que les images dansUIButton
's etUIBarButtonItem
' s.la source
UIImageView
, donc la couleur de teinte n'est pas toujours affichée lors de l'exécution de l'application.L'utilisation du mode de rendu de modèle avec une UIImageView dans un storyboard ou xib est très boguée, à la fois sur iOS 7 et iOS 8.
Sur iOS 7
UIImage n'est pas correctement décodée à partir du storyboard / xib. Si vous inspectez la
imageView.image.renderingMode
propriété dans laviewDidLoad
méthode, vous remarquerez qu'elle l'est toujoursUIImageRenderingModeAutomatic
, même si vous la définissez sur Render As Template Image dans votre fichier xcassets.Pour contourner le problème, vous devez définir manuellement le mode de rendu:
Sur iOS 8
L'interface utilisateur est correctement décodée et sa
renderingMode
propriété reflète ce qui a été choisi dans le fichier xcassets mais l'image n'est pas teintée.Pour contourner le problème, vous avez deux options:
tintColor
propriété dans le attributs d'exécution définis utilisateur au lieu du volet de l'inspecteur d'attributs.ou
Vous pouvez choisir votre option préférée, les deux teignant correctement l'image.
(Si vous compilez avec Xcode 6.2, faites simplement
self.imageView.tintColor = self.imageView.tintColor;
mais cela ne fonctionne plus si vous compilez avec Xcode 6.3)Conclusion
Si vous devez prendre en charge à la fois iOS 7 et iOS 8, vous aurez besoin des deux solutions de contournement. Si vous devez uniquement prendre en charge iOS 8, une seule solution de contournement est nécessaire.
la source
La définition de imageView RenderingMode pour utiliser la couleur de teinte dans le storyboard peut être réduite à une seule ligne:
Ensuite, l'image et la couleur de teinte peuvent toutes être définies dans le Storyboard.
la source
Vous pouvez résoudre les problèmes .xib avec une extension:
Source: https://gist.github.com/buechner/3b97000a6570a2bfbc99c005cb010bac
Incroyable, ce bug existe depuis 4 à 5 ans maintenant.
la source
Vous ne pouvez pas définir
renderingMode
à partir destoryboard
ouxib
. Il pourrait accéder par programme.ex:
la source
UIImage *selectedImage = [unSeletedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
Définissez tintColor & Class dans Storyboard.
la source
C'est très facile à réparer
Créez simplement la classe UIImageViewPDF et utilisez-la dans votre storyboard
la source
Une autre solution consiste à créer une
UIImageView
sous - classe:Ensuite, définissez simplement la classe dans Interface Builder sur
TemplateImageView
.la source
Un moyen simple d'être défini à partir de Storyboard:
Fonctionne bien sur iOS 10 et Swift 3
la source
Dans iOS 9, le paramètre
tintColor
propriété dans Interface Builder est toujours boguée.Notez qu'une solution de travail en plus d'écrire des lignes modifiant directement les
ImageView
propriétés est de définir Render As: Template Image dans le catalogue d'actifs, et d'appeler par exemple:la source
J'ai résolu ce problème en ajoutant un attribut d'exécution
tintColor
dans le générateur d'interface.REMARQUE: vous devrez toujours définir votre image pour qu'elle soit rendue en tant qu'image modèle dans votre fichier Images.xcassets.
la source
Si vous créez un IBOutlet, vous pouvez le modifier dans votre méthode awakeFromNib comme ceci ...
Bien que la réponse de @ Moby soit plus correcte, cela pourrait être plus succinct.
la source
Fou ce bug est toujours dans iOS 12.1! Pour les storyboards / xibs: l'ajout d'une balise à UIImageView peut être une solution rapide.
Swift 4.2
la source
Dans le storyboard, sélectionnez UIImageView et sélectionnez l'inspecteur, définissez property
renderModeTemplate
=On
In Storyboardla source
Comme Rudolf l'a également mentionné ci - dessus , je définirais une classe simple, comme ceci:
Après cette définition, ajoutez simplement une vue d'image au storyboard et sélectionnez sa classe personnalisée en tant que
TintImage
. Cela activera la sélection "Teinte" dans le storyboard.la source