2017-01-19 49 views
9

w Swift 3, gdy próbuję programowo zmienić kolor obrazu załadowane z aktywów po prostu tak:Swift 3: UIImage przy ustawieniu szablonu obraz i zmieniła kolor odcień nie pokazuje obrazu

let imageView = UIImageView() 
    let image = UIImage(named: "imageFromAssets")?.withRenderingMode(.alwaysTemplate) 
    imageView.contentMode = .scaleAspectFit 
    imageView.tintColor = GREEN_UICOLOR // Change to custom green color 
    imageView.image = image 

obraz pokazuje się jako kwadratowego bloku poniżej:

Template image with green tint that does not work

jednak najśmieszniejsze jest to nie zawsze się zdarza. Z niektórych innych obrazów w aktywach, to działa i zmienia odcień zielony:

Template image with green tint that works

dlaczego jest niespójne zachowanie tutaj? I ogólnie, w jaki sposób mogę dodać obraz szablonu do zasobów i móc programowo zmienić jego kolor? Zdaję sobie sprawę, że gdy nie zmieniam obrazu na obraz szablonu, to działa, ale nie mogę tego zrobić, ponieważ chcę zmienić odcień obrazu.

+0

Sprawdź obraz, powinien być złożony z alfą i kolorem – Andrea

Odpowiedz

15

przypadku obrazów szablonu tła musi być przejrzysta - nie biały.

8

Szablon działa za pomocą właściwości krycie obrazu.

Jeśli masz obrazek z przezroczystym tłem wówczas przezroczyste tło pozostaje przejrzysty i cała reszta obrazu jest zmieniany na maleńkim koloru.

Jeśli obraz nie posiada przezroczyste tło. Powiedzmy, że ma białe tło. Następnie cały obraz zostanie zmieniony na kolor tinty (jak widać w twoim przykładzie).

Do tego trzeba dać ten obraz przezroczyste tło naprawić.

Warto również zauważyć, że nie trzeba tego kodu. Jeśli używasz obrazu tylko w trybie szablonu, po prostu wybierz tryb renderowania w katalogu zasobów.