如何获得一个普通的UIView乘混合模式(没有的UIImage)(How to get multip

2019-09-02 02:55发布

我在iPad应用程序有一个形象,我基本上要放在它上面的彩色滤光片。 为此,我有一个屏蔽为一定的形状,我把图片上,颜色的UIView。 由于调整阿尔法不给我,我想使用混合模式,而不是预期的效果。

据我所知,你只能使用上的图像混合模式,而不是简单的看法。 视图的颜色是动态的,所以我不能只用一张图片来代替。

我也试过栅格化视图的图像,但得到了所有pixely和奇数或东西,但也许我做错了什么。

因此,基本的问题是:是否有可能应用混合模式的看法? 或者我应该采取完全不同的方法来达到同样的目的?

Answer 1:

看看的文档进行的CALayer的compositingFilter: https://developer.apple.com/documentation/quartzcore/calayer/1410748-compositingfilter

在你的颜色叠加查看您可以设置view.layer.compositingFilter到CICategoryCompositeOperation实现与它后面的内容混合。 这是应用了乘法混合模式的一些示例代码操场测试它(更换UIImage(named: "")以测试自己的图像)

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


文章来源: How to get multiply blend mode on a plain UIView (not UIImage)