2013-05-06 21 views
10

Mam obraz w mojej aplikacji na iPada i zasadniczo chcę umieścić na nim filtr kolorów. Do tego mam kolorowy UIView, który jest zamaskowany do pewnego kształtu, który umieściłem na obrazie. Ponieważ ustawienie alfa nie daje pożądanego efektu, chciałbym zamiast tego użyć trybów mieszania.Jak uzyskać tryb mieszania wielokrotnego na zwykłym UIView (nie UIImage)

Z tego co wiem, można używać tylko trybów mieszania obrazów, a nie zwykłych widoków. Kolor widoku jest dynamiczny, więc nie mogę po prostu użyć zdjęcia zamiast niego.

Próbowałem także zrasteryzować widok na obraz, ale to wszystko było dziwne i dziwne, czy coś, ale może zrobiłem coś nie tak.

Podstawowe pytanie brzmi: Czy można zastosować tryby mieszania do widoków? Czy powinienem przyjąć zupełnie inne podejście, aby osiągnąć ten sam cel?

Odpowiedz

0

Spójrz na docs dla compositingFilter CALayer za: https://developer.apple.com/documentation/quartzcore/calayer/1410748-compositingfilter

Na kolorowym nakładki zobaczyć można ustawić view.layer.compositingFilter do CICategoryCompositeOperation osiągnąć mieszanie z treścią za nim. Oto przykładowy kod zabaw z zastosowanym trybem wielokrotnego mieszania w celu przetestowania (zastąpienie UIImage(named: "") własnym obrazem do testowania)

import UIKit 
import PlaygroundSupport 

class MyViewController : UIViewController { 
    override func loadView() { 

     let mainView = UIView() 
     self.view = mainView 

     let image = UIImageView() 
     image.translatesAutoresizingMaskIntoConstraints = false; 
     image.image = UIImage(named: "maxresdefault.jpg") 
     mainView.addSubview(image) 

     let overlay = UIView() 
     overlay.translatesAutoresizingMaskIntoConstraints = false; 
     overlay.backgroundColor = .red 
     overlay.layer.compositingFilter = "multiplyBlendMode" 
     mainView.addSubview(overlay) 

     mainView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[subview]-0-|", options: .directionLeadingToTrailing, metrics: nil, views: ["subview": view])) 
     mainView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[subview]-0-|", options: .directionLeadingToTrailing, metrics: nil, views: ["subview": view])) 

     mainView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[subview]-0-|", options: .directionLeadingToTrailing, metrics: nil, views: ["subview": overlay])) 
     mainView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[subview]-0-|", options: .directionLeadingToTrailing, metrics: nil, views: ["subview": overlay])) 
    } 
} 

PlaygroundPage.current.liveView = MyViewController() 
Powiązane problemy