Zauważyłem, że kiedy umieścić biały lub czarny UIImage
do UISegmentedControl
niej automatycznie kolorowych masek to, aby dopasować odcień kontroli segmentowej. Myślałem, że to naprawdę fajne i zastanawiałem się, czy mógłbym to zrobić również gdzie indziej. Na przykład mam kilka przycisków, które mają jednolity kształt, ale różne kolory. Zamiast tworzyć PNG dla każdego przycisku, czy mógłbym w jakiś sposób użyć tego maskowania kolorów, aby użyć tego samego obrazu dla wszystkich z nich, ale następnie ustawić kolor odcienia lub coś, aby zmienić ich rzeczywisty kolor?
294
Odpowiedzi:
Począwszy od systemu iOS 7, dostępna jest nowa metoda
UIImage
określania trybu renderowania. Użycie trybu renderowaniaUIImageRenderingModeAlwaysTemplate
pozwoli kontrolować kolor obrazu za pomocą koloru odcienia przycisku.Cel C
Szybki
źródło
tintColor
jest zbyt ciemne, upewnij się, żeadjustsImageWhenHighlighted
NIE. (Lub w IB: „Wyróżnione dopasowania obrazu” nie są zaznaczone.)Jak Ric wspomniał już w swoim poście , możesz ustawić tryb renderowania w kodzie, możesz to również zrobić bezpośrednio w katalogu obrazów, patrz załączony obraz poniżej. Wystarczy ustawić
Render As
naTemplate Image
Zastrzeżenie Mam problemy z iOS 7 i tym podejściem. Więc jeśli używasz iOS 7, możesz to zrobić również w kodzie, aby się upewnić, jak opisano tutaj .
źródło
Przyciski niestandardowe pojawiają się w odpowiednich kolorach obrazu. Ustawienie typu przycisku na „System” w serii ujęć (lub
UIButtonTypeSystem
w kodzie) spowoduje wyświetlenie obrazu przycisku z domyślnym kolorem odcienia.(testowany na iOS9, Xcode 7.3)
źródło
Musisz ustawić tryb renderowania obrazu na
UIImageRenderingModeAlwaysTemplate
, aby miećtintColor
wpływ na UIImage. Oto rozwiązanie w Swift:SWIFT 4x
źródło
Jeśli masz przycisk niestandardowy z obrazem w tle. Możesz ustawić kolor odcienia swojego przycisku i zastąpić obraz następującymi.
W zasobach wybierz tło przycisku, dla którego chcesz ustawić kolor odcienia.
W inspektorze atrybutów obrazu ustaw wartość renderowania jako „Obraz szablonu”
Teraz po każdym ustawieniu
button.tintColor = UIColor.red
przycisk będzie wyświetlany na czerwono.źródło
W Swift możesz to zrobić w następujący sposób:
Następnie w twoim widokuDidLoad
I aby zmodyfikować kolor
EDYCJA Xcode 8 Teraz możesz także po prostu tryb renderowania obrazu z zestawu .xcassets do obrazu szablonu i nie musisz
var exampleImage
już go deklarowaćźródło
Nie jestem pewien, czego dokładnie chcesz, ale ta metoda kategorii zamaskuje obraz UIIm określonego koloru, abyś mógł mieć pojedynczy obraz i zmienić jego kolor na dowolny.
ImageUtils.h
ImageUtils.m
Zaimportuj kategorię ImageUtils i zrób coś takiego ...
źródło
kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast
naCGBitmapContextCreate
UIDevice
klasy: właściwość istnieje w iOS 4.0.CGFloat scale = [UIScreen mainScreen].scale; CGFloat width = self.size.width * scale; CGFloat height = self.size.height * scale;
scale
scale
wartości, gdyUIImage
zostanie utworzona:UIImage *coloredImage = [UIImage imageWithCGImage:cImage scale:scale orientation:self.imageOrientation];
Swift 4 with customType:
źródło
W przypadku Xamarin.iOS (C #):
źródło
Swift 3 :
To rozwiązanie może być wygodne, jeśli ustawiłeś już obraz za pomocą konstruktora interfejsu xCode. Zasadniczo masz jedno rozszerzenie do pokolorowania obrazu:
Następnie możesz przygotować to rozszerzenie UIButton, aby pokolorować obraz dla określonego stanu:
Stosowanie:
PS (działa dobrze również w komórkach tabeli, nie trzeba wywoływać
setNeedDisplay()
metody, zmiana koloru jest natychmiastowa z powodu rozszerzenia UIImage) .źródło
Jeśli chcesz ręcznie maskować obraz, oto zaktualizowany kod, który działa z ekranami siatkówki
źródło
Powinieneś spróbować
Po ustawieniu ramki
źródło
Swift 3.0
źródło
Zmień kolor przycisku lub kolor odcienia widoku obrazu Szybki:
źródło
Żadne z powyższych nie działało dla mnie, ponieważ odcień został wyczyszczony po kliknięciu. Musiałem użyć
źródło