J'ai remarqué que lorsque je place un blanc ou un noir UIImage
dans un UISegmentedControl
masque de couleur automatique, il correspond à la teinte du contrôle segmenté. Je pensais que c'était vraiment cool et je me demandais si je pouvais le faire ailleurs aussi. Par exemple, j'ai un tas de boutons qui ont une forme uniforme mais des couleurs variées. Au lieu de créer un PNG pour chaque bouton, pourrais-je utiliser ce masquage de couleur pour utiliser la même image pour chacun d'eux, puis définir une couleur de teinte ou quelque chose pour changer leur couleur réelle?
294
Réponses:
Depuis iOS 7, il existe une nouvelle méthode
UIImage
pour spécifier le mode de rendu. L'utilisation du mode de renduUIImageRenderingModeAlwaysTemplate
permettra à la couleur de l'image d'être contrôlée par la couleur de teinte du bouton.Objectif c
Rapide
la source
tintColor
est trop sombre, assurez-vous queadjustsImageWhenHighlighted
NON. (Ou dans IB: "Highlighted Adjusts Image" n'est pas coché.)Comme Ric l'a déjà mentionné dans son article, vous pouvez définir le mode de rendu en code, vous pouvez également le faire directement dans le catalogue d'images, voir l'image ci-jointe. Réglez simplement le
Render As
surTemplate Image
Attention, j'ai eu des problèmes avec iOS 7 et cette approche. Donc, si vous utilisez iOS 7 également, vous pouvez également le faire en code, comme décrit ici .
la source
Les boutons personnalisés apparaissent dans leurs couleurs d'image respectives. La définition du type de bouton sur "Système" dans le storyboard (ou
UIButtonTypeSystem
dans le code) rendra l'image du bouton avec la couleur de teinte par défaut.(testé sur iOS9, Xcode 7.3)
la source
Vous devez définir le mode de rendu d'image
UIImageRenderingModeAlwaysTemplate
sur pour avoir l'tintColor
effet sur l'image UII. Voici la solution dans Swift:SWIFT 4x
la source
Si vous avez un bouton personnalisé avec une image d'arrière-plan, vous pouvez définir la couleur de teinte de votre bouton et remplacer l'image par ce qui suit.
Dans les ressources, sélectionnez l'arrière-plan du bouton que vous souhaitez définir la couleur de teinte.
Dans l'inspecteur d'attributs de l'image, réglez la valeur sur "Template Image"
Maintenant, chaque fois que vous définissez
button.tintColor = UIColor.red
votre bouton sera affiché en rouge.la source
Dans Swift, vous pouvez le faire comme ceci:
Puis dans votre viewDidLoad
Et pour modifier la couleur
EDIT Xcode 8 Maintenant , vous pouvez aussi tout simplement le mode de rendu de l'image dans votre .xcassets à l' image modèle et vous n'avez pas besoin de déclarer spécifiquement dans le
var exampleImage
plusla source
Je ne sais pas exactement ce que vous voulez, mais cette méthode de catégorie masquera un UIImage avec une couleur spécifiée afin que vous puissiez avoir une seule image et changer sa couleur en ce que vous voulez.
ImageUtils.h
ImageUtils.m
Importez la catégorie ImageUtils et faites quelque chose comme ça ...
la source
kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast
surCGBitmapContextCreate
UIDevice
classe:CGFloat scale = [UIScreen mainScreen].scale; CGFloat width = self.size.width * scale; CGFloat height = self.size.height * scale;
Lascale
propriété existe depuis iOS 4.0.scale
valeur lors de laUIImage
création de:UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:scale orientation:self.imageOrientation];
Swift 4 avec customType:
la source
Pour Xamarin.iOS (C #):
la source
Swift 3 :
Cette solution pourrait être confortable si vous avez déjà défini votre image via le générateur d'interface xCode. Fondamentalement, vous avez une extension pour coloriser une image:
Ensuite, vous pouvez préparer cette extension UIButton pour coloriser l'image pour un état particulier:
Usage:
PS (fonctionne bien également dans les cellules du tableau, vous n'avez pas besoin d'appeler la
setNeedDisplay()
méthode, le changement de couleur est immédiat en raison de l' extension UIImage .la source
Si vous souhaitez masquer manuellement votre image, voici un code mis à jour qui fonctionne avec les écrans rétine
la source
Tu devrais essayer
Après avoir réglé le cadre
la source
Swift 3.0
la source
Changer l'image du bouton ou la couleur de la teinte de la vue d'image Swift:
la source
Rien de ce qui précède n'a fonctionné pour moi, car la teinte a été effacée après le clic. Je devais utiliser
la source