屏蔽 UIImageView 需要什么,我如何在 Swift 3 中进行屏蔽?

What do I need for masking a UIImageView and how do I do it in Swift 3?

我想知道如果我想使用蒙版图像让我的 UIImageView 成为特定形状,我需要什么。据我了解,要创建一个蒙版,我需要在白色背景上制作一张全黑蒙版形状的图像。像这样的东西,例如:

首先,这是否足以塑造图像视图,如果可以,我如何在 Swift 3 中完成?我只能找到过时或用 Objective-C 编写的屏蔽代码。我试过简单地将上面的图像分配给 UIImageView,然后将图像视图分配给我想要塑造的 UIImageViewmask 属性,如下所示:

self.defaultImageView.mask = self.maskImageView

这没有做任何事情。它只是让 self.maskImageView 消失了(图像视图都是通过情节提要添加的,并使用 IBOutlet 属性连接的)。我确定我忘记做某事了。不可能这么简单。如果有人能帮助我,我将不胜感激。就像我说的,我将两个图像视图放在情节提要中的完全相同的位置,彼此重叠。

更新: 从情节提要中删除遮罩后,我第一次尝试以编程方式设置遮罩。

let layer:CALayer = CALayer()
    let mask:UIImage = UIImage(named: "Black-Star-Photographic-Agency")!
    layer.contents = mask
    layer.frame = CGRect(x: 0, y: 0, width: ((self.defaultImageView.image?.size.width)!), height: (self.defaultImageView.image?.size.height)!)
    self.defaultImageView.layer.mask = layer
    self.defaultImageView.layer.masksToBounds = true

结果是图像视图完全消失,不再可见。我是在做某事,还是忘记了什么,或者两者都有?

您应该使用支持透明的 png 图片,这与 jpg 不同。

在 Photoshop 中,您的图像应类似于:

不管你的形状是黑色还是白色。重要的是每个像素的透明度。不透明区域(在本例中为黑色)将可见,透明区域将被修剪。

编辑:

如果你这样做,你不应该从情节提要中创建蒙版视图。它不会成为您的视图层次结构的一部分。只需像这样以编程方式添加它:

let maskView = UIImageView()

override func viewDidLoad() {
    super.viewDidLoad()
    maskView.image = UIImage(named: "mask")
    imageView.mask = maskView        
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    maskView.frame = imageView.bounds
}

输出:

Here 是一个测试项目来展示它是如何工作的。

此外,如果您在掩码中使用自定义 frame/image 和 运行 无法正确显示,请尝试设置掩码的内容模式:

maskView.contentMode = .scaleAspectFit