J'ai ma propre sous-classe de UIButton
. J'ajoute UIImageView
dessus et ajoute une image. Je voudrais le peindre sur l'image avec une couleur de teinte mais cela ne fonctionne pas.
Jusqu'à présent, j'ai:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
self.clipsToBounds = YES;
self.circleView = [[UIView alloc]init];
self.circleView.backgroundColor = [UIColor whiteColor];
self.circleView.layer.borderColor = [[Color getGraySeparatorColor]CGColor];
self.circleView.layer.borderWidth = 1;
self.circleView.userInteractionEnabled = NO;
self.circleView.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview:self.circleView];
self.iconView = [[UIImageView alloc]init];
[self.iconView setContentMode:UIViewContentModeScaleAspectFit];
UIImage * image = [UIImage imageNamed:@"more"];
[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
self.iconView.image = image;
self.iconView.translatesAutoresizingMaskIntoConstraints = NO;
[self.circleView addSubview:self.iconView];
...
et sur sélection:
- (void) setSelected:(BOOL)selected
{
if (selected) {
[self.iconView setTintColor:[UIColor redColor]];
[self.circleView setTintColor:[UIColor redColor]];
}
else{
[self.iconView setTintColor:[UIColor blueColor]];
[self.circleView setTintColor:[UIColor blueColor]];
}
}
Qu'ai-je fait de mal? (La couleur de l'image reste toujours la même qu'à l'origine.)
setTintColor
lorsque vous créez le iconView ?Réponses:
Au lieu de ce code:
tu aurais dû:
Utilisez ceci dans Swift 4.1
la source
Vous pouvez également simplement définir cela sur votre élément. Assurez-vous que votre image contient tous les pixels blancs + transparent.
la source
(Impossible de modifier le message @Zhaolong Zhong)
Dans Swift 3.0 , vous pouvez faire:
la source
Dans swift 2.0+, vous pouvez faire:
la source
Version Swift: 5.2
Objectif c
Ou
Vous pouvez également simplement définir cela sur votre élément.
la source
Un pas en avant. Ceci est une sous-classe de UIImageView. (Solution non exacte pour la question d'origine.) À utiliser dans Interface Builder en définissant le nom de classe sur TintedImageView. Mises à jour en temps réel à l'intérieur du concepteur à mesure que la couleur de la teinte change.
(Swift 3.1, Xcode 8.3)
la source
Rendre l'imageView
Faire l'image
Câblez-les ensemble
Affichez-le
la source
tout dit est correct. ma contribution Si vous ne pouvez pas / ne voulez pas appliquer à chaque UiImageView, OU pour plus d'efficacité, vous devez effectuer un rendu UNE FOIS (ou exemple pour les cellules de tables vues)
Et définissez tous les éléments de l'interface utilisateur cette UIImage.
la source
La réponse @odemolliens devrait juste fonctionner.
Mais si vous rencontrez toujours des problèmes, assurez-vous que la couleur de teinte que vous appliquez à UIImageView est différente de celle définie dans Interface Builder.
la source