我需要什么来屏蔽UIImageView以及如何在Swift 3中完成它?

我想知道如果我想用一个蒙版图像把我的UIImageView变成一个特定的形状,我需要什么。根据我的理解,要创建一个蒙版,我需要一个在白色背景上全黑的蒙版形状的图像。例如:
Star-shaped mask image
首先,这是否足以形成一个图像视图,如果是,我该如何在Swift 3中进行?我只能找到过时的或用Objective-C编写的屏蔽代码。我尝试简单地将上面的图像分配给一个UIImageView然后将图像视图分配给我想要塑造的maskUIImageView属性,如:

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中,您的图像应该类似于此:
enter image description here
不管你的体型是黑色还是白色。重要的是每个像素的透明度。不透明区域(本例中为黑色)将可见,透明区域将被修剪。
编辑:
如果这样做,则不应该从故事板创建遮罩视图。它不会成为视图层次结构的一部分。只需按如下程序添加:

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
}

输出:
enter image description here
Here是一个测试项目,展示它的工作原理。