Cómo get el modo de mezcla múltiple en una UIView simple (no UIImage)

Tengo una image en mi iPad y, básicamente, quiero colocar un filter de color encima. Para esto, tengo una UIView coloreada que está enmascarada con una determinada forma que pongo sobre la image. Dado que ajustar el alfa no me da el efecto deseado, me gustaría usar los modos de fusión en su lugar.

Por lo que sé, solo puedes usar modos de fusión en imágenes y no vistas planas. El color de la vista es dynamic, por lo que no puedo usar una image en su lugar.

También traté de rasterizar la vista de una image, pero eso fue todo pixelado y extraño o algo así, pero tal vez hice algo mal.

Entonces, la pregunta básica es: ¿Es posible aplicar modos de fusión a las vistas? ¿O debería adoptar un enfoque completamente diferente para alcanzar el mismo objective?

Eche un vistazo a los documentos de composition de CALayerFilter: https://developer.apple.com/documentation/quartzcore/calayer/1410748-compositingfilter

En la vista de superposition de colors, puede configurar view.layer.compositingFilter en una CICategoryCompositeOperation para lograr una combinación con el contenido que está detrás. Aquí hay un código de área de juego de muestra con un modo de mezcla múltiple aplicado para probar (reemplace el UIImage(named: "") con su propia image para probarla)

 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 = .networking 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()