Eu tenho minha própria subclasse de UIButton
. Eu adiciono UIImageView
e adiciono uma imagem. Gostaria de pintar sobre a imagem com um tom de cor, mas não funciona.
Até agora eu tenho:
- (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];
...
e na seleção:
- (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]];
}
}
O que eu fiz errado? (A cor da imagem sempre permanece a mesma do que era originalmente.)
setTintColor
criar o iconView ?Respostas:
Em vez deste código:
Você devia ter:
Use isso no Swift 4.1
fonte
Você também pode apenas definir isso em seu ativo. Certifique-se de que sua imagem contém todos os pixels brancos + transparente.
fonte
(Não é possível editar a postagem @Zhaolong Zhong)
No swift 3.0 , você pode fazer:
fonte
No swift 2.0+, você pode fazer:
fonte
Versão Swift: 5.2
Objetivo C
Ou
Você também pode simplesmente definir isso em seu ativo.
fonte
Um passo adiante. Esta é uma subclasse drop-in de UIImageView. (Não é a solução exata para a pergunta original.) Use no Interface Builder definindo o nome da classe como TintedImageView. Atualizações em tempo real dentro do designer conforme a tonalidade muda.
(Swift 3.1, Xcode 8.3)
fonte
Faça o imageView
Faça a imagem
Ligue-os juntos
Exibir
fonte
tudo o que foi dito está correto. minha contribuição Se você não pode / não deseja aplicar a todos UiImageView, OU para eficiência, você precisa renderizar UMA VEZ (ou exemplo para células de tableviews)
E defina para todos os elementos da interface do usuário este UIImage.
fonte
A resposta de @odemolliens deve funcionar.
Mas se você ainda estiver tendo problemas, certifique-se de que a cor de matiz que você está aplicando ao UIImageView é diferente daquela definida no Interface Builder.
fonte