2013-05-06 8 views
10

Ho un'immagine nella mia app per iPad e fondamentalmente voglio posizionare un filtro colorato su di esso. Per questo ho un UIView colorato che è mascherato da una certa forma che ho messo sopra l'immagine. Dal momento che la regolazione dell'alfa non mi dà l'effetto desiderato, mi piacerebbe invece utilizzare i metodi di fusione.Come ottenere la modalità di fusione multipla su un UIView semplice (non UIImmagine)

Per quanto ne so, è possibile utilizzare i metodi di fusione solo sulle immagini e non sulle semplici viste. Il colore della vista è dinamico, quindi non posso usare solo un'immagine.

Ho anche provato a rasterizzare la vista di un'immagine, ma quella è diventata tutta pixely e dispari o qualcosa del genere, ma forse ho fatto qualcosa di sbagliato.

Quindi, la domanda di base è: è possibile applicare i metodi di fusione alle viste? O dovrei adottare un approccio completamente diverso per raggiungere lo stesso obiettivo?

risposta

0

Date un'occhiata alla documentazione per compositingFilter di CALayer: https://developer.apple.com/documentation/quartzcore/calayer/1410748-compositingfilter

Sul sovrapposizione di colore vista è possibile impostare view.layer.compositingFilter ad un CICategoryCompositeOperation per raggiungere la miscelazione con il contenuto dietro di esso. Ecco un esempio di codice del parco giochi con una modalità di fusione multipla applicata per provarlo (sostituisci lo UIImage(named: "") con la tua immagine per il test)

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() 
Problemi correlati