Próbuję zamaskować obraz za pomocą czegoś takiego:
Czy mógłbyś mi pomóc?
Używam tego kodu:
- (void) viewDidLoad {
UIImage *OrigImage = [UIImage imageNamed:@"dogs.png"];
UIImage *mask = [UIImage imageNamed:@"mask.png"];
UIImage *maskedImage = [self maskImage:OrigImage withMask:mask];
myUIIMage.image = maskedImage;
}
ios
objective-c
uiimage
mask
Mc.Lover
źródło
źródło
Odpowiedzi:
Jest łatwiejszy sposób.
Dla Swift 4 i plus wykonaj poniższy kod
źródło
viewDidLoad
ale nic się nie stało!Samouczek używa tej metody z dwoma parametrami:
image
imaskImage
, które należy ustawić, wywołując metodę. Przykładowe wywołanie mogłoby wyglądać następująco, zakładając, że metoda jest w tej samej klasie, a obrazy znajdują się w Twoim pakiecie:Uwaga - zdumiewające, że zdjęcia nie muszą nawet być tego samego rozmiaru.
Po podaniu kodu dodałem do niego kilka liczb jako komentarze w celach informacyjnych. Nadal masz dwie możliwości. Cała ta sprawa to metoda, którą gdzieś wywołujesz. Nie musisz tworzyć obrazów w środku: zmniejsza to możliwość ponownego użycia metody do zera.
Aby kod działał. Zmień nagłówek metody ( 1. ) na
Następnie zmień nazwę zmiennej w 2. na
Metoda zwróci zamaskowane obrazy, więc będziesz musiał w którymś miejscu wywołać tę metodę. Czy możesz pokazać nam kod, w którym wywołujesz swoją metodę?
źródło
UIImage *image
kod? !!! ponieważ na-(UIimage *) maskeImage
kompilatorze pojawia się błąd redefinicji!Swift 3 - najprostsze rozwiązanie, jakie znalazłem
Stworzyłem
@IBDesignable
w tym celu, abyś mógł od razu zobaczyć efekt na swojej planszy.Jak używać
Przykład
Uwagi
źródło
Wypróbowałem oba kody używając CALayer lub CGImageCreateWithMask, ale żaden z nich nie działał dla mnie
Ale okazało się, że problem dotyczy formatu pliku png, a nie kodu!
więc po prostu podziel się moim odkryciem!
Jeśli chcesz użyć
musisz użyć 24-bitowego png bez kanału alfa
Jeśli chcesz użyć maski CALayer, musisz użyć (24-bitowego lub 8-bitowego) png z kanałem alfa, gdzie przezroczysta część twojego png będzie maskować obraz (dla gładkiej gradientowej maski alfa ... użyj 24-bitowego png z kanałem alfa)
źródło
To działa dla mnie.
źródło
SWIFT 3 XCODE 8.1
// do użycia
źródło
Szybka wersja przyjętego rozwiązania:
Na wypadek, gdyby ktoś tego potrzebował.
Działa na mnie bez zarzutu.
źródło
stwierdziliśmy, że poprawna odpowiedź nie działa teraz i zaimplementowaliśmy małą klasę drop-in, która pomaga zamaskować dowolny obraz w UIImageView.
Jest dostępny tutaj: https://github.com/Werbary/WBMaskedImageView
Przykład:
źródło