Mam własną podklasę UIButton
. Dodaję UIImageView
na to i dodaję obrazek. Chciałbym pomalować obraz kolorem tinta, ale to nie działa.
Jak dotąd mam:
- (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];
...
i przy wyborze:
- (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]];
}
}
Co zrobiłem źle? (Kolor obrazu zawsze pozostaje taki sam, jak pierwotnie).
setTintColor
podczas tworzenia iconView ?Odpowiedzi:
Zamiast tego kodu:
powinieneś mieć:
Użyj tego w Swift 4.1
źródło
Możesz również ustawić to w swoim zasobie. Upewnij się, że obraz zawiera wszystkie białe piksele + przezroczyste.
źródło
(Nie można edytować postu @Zhaolong Zhong)
W Swift 3.0 możesz:
źródło
W Swift 2.0+ możesz:
źródło
Szybka wersja: 5.2.0
Cel C
Lub
Możesz również ustawić to w swoim zasobie.
źródło
Jeden krok dalej. To jest podklasa typu drop-in UIImageView. (Nie jest to dokładne rozwiązanie dla oryginalnego pytania). Użyj w programie Interface Builder, ustawiając nazwę klasy na TintedImageView. Aktualizacje w czasie rzeczywistym wewnątrz projektanta wraz ze zmianą koloru odcienia.
(Swift 3.1, Xcode 8.3)
źródło
Utwórz plik imageView
Zrób obraz
Połącz je razem
Pokaż to
źródło
wszystko powiedziane jest poprawne. mój wkład Jeśli nie możesz / nie chcesz zastosować do każdego UiImageView LUB ze względu na wydajność musisz renderować RAZ (lub przykład dla komórek widoków tabel)
I ustaw wszystkie elementy UI w tym UIImage.
źródło
Odpowiedź @odemolliens powinna po prostu działać.
Ale jeśli nadal masz problemy, upewnij się, że kolor tinty, który stosujesz do UIImageView, różni się od zdefiniowanego w Interface Builder.
źródło