Mam UIImageView o nazwie „theImageView”, z UIImage w jednym kolorze (przezroczyste tło), podobnie jak lewe czarne serce poniżej. Jak mogę programowo zmienić kolor odcienia tego obrazu w systemie iOS 7 lub nowszym, zgodnie z metodą odcienia stosowaną w ikonach paska nawigacji iOS 7+?
Czy ta metoda może również działać w WatchKit dla aplikacji Apple Watch?
UIImage
przyUIImageRenderingModeAlwaysTemplate
czym ustawienieUIImageVIew
„stintColor
pracy robi. (w moim kodzie ^^)Odpowiedzi:
iOS
W przypadku aplikacji na iOS w Swift 3, 4 lub 5:
W przypadku Swift 2:
Tymczasem nowoczesne rozwiązanie Objective-C to:
Watchkit
W aplikacjach WatchKit dla Apple Watch możesz ustawić kolor odcienia obrazu szablonu .
Aby następnie ustawić kolor odcienia w Swift 3 lub 4:
Swift 2:
Aby następnie ustawić kolor odcienia w Objective-C:
Jeśli użyjesz obrazu szablonu i nie zastosujesz koloru odcienia, zostanie zastosowany globalny odcień dla aplikacji WatchKit. Jeśli nie ustawiono globalnego odcienia,
theImage
będzie domyślnie zabarwiony na jasnoniebiesko, gdy będzie używany jako obraz szablonu.źródło
Oto kategoria, która powinna załatwić sprawę
więc zrobiłbyś:
źródło
Musiałem to zrobić w Swift za pomocą
extension
.Myślałem, że podzielę się tym, jak to zrobiłem:
Stosowanie:
theImageView.image = theImageView.image.imageWithColor(UIColor.redColor())
Szybki 4
Stosowanie:
theImageView.image = theImageView.image?.imageWithColor(color1: UIColor.red)
źródło
color1.setFill()
dokładnie poniżej pierwszego wiersza metodyUIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
.CGBlendMode.Normal
tego użyj @CeceXXW scenorysie i obrazach Zasoby. możesz zmienić te dwa również:
Zaktualizuj tryb renderowania do obrazu szablonu
Zaktualizuj kolor odcienia w widokach.
źródło
imageView.tintColor
z kodu.Szybki 4
Zmień odcień pliku UIImage SVG / PDF , który działa dla obrazu o unikalnym kolorze :
Zmień odcień UIImageView , który działa dla obrazu o unikalnym kolorze :
Zmień odcień UIImage dla obrazu , użyj tego:
źródło
Jeśli komuś zależy na rozwiązaniu bez
UIImageView
:źródło
Z Swift
źródło
.AlwaysTemplate
.Spróbuj tego
http://robots.thoughtbot.com/designing-for-ios-blending-modes
lub
źródło
Do szybkiego 3 celów
theImageView.image = theImageView.image!.withRenderingMode(.alwaysTemplate) theImageView.tintColor = UIColor.red
źródło
Do barwienia obrazu przycisku UIB
źródło
iOS
Rozwiązanie do zrobienia tego z Konstruktora interfejsów, ustaw parametr templateImage w keyPath i wybierz kolor odcienia z IB
}
źródło
W systemie iOS 13 i nowszym możesz po prostu używać
źródło
Skorzystaj z rozszerzenia w Swift: -
źródło
Swift 3 wersja rozszerzenia odpowiedzi z Fuzz
źródło
Teraz używam tej metody opartej na odpowiedzi Duncana Babbage'a:
źródło
źródło
Podklasa, której można także używać z kodu i konstruktora interfejsów:
źródło
To jest moje rozszerzenie UIImage i możesz bezpośrednio użyć funkcji changeTintColor dla obrazu.
Przykładowe użycie tego typu
I możesz użyć
changeColor
funkcji zmiany, aby zmienić kolor obrazuźródło
profileImageView.image = theImageView.image! .withRenderingMode (.alwaysTemplate)
profileImageView.tintColor = UIColor.green
LUB
Najpierw wybierz opcję Określony obraz w zasobie obrazu, a następnie wybierz opcję Czerwony jako Szablon zamiast Domyślny, a następnie po tej linii zapisu. profileImageView.tintColor = UIColor.green
źródło
jeśli masz identyfikator dla obrazu SVG, możesz wypełnić kolory w odniesieniu do identyfikatora.
LUB Zapoznaj się z tym przykładem.
https://github.com/ravisfortune/SVGDEMO
źródło
źródło