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

Fre*_*son 10 mask uiimageview ios swift

我想知道如果我想使用蒙版图像来获得UIImageView特定形状我需要什么.根据我的理解,要创建一个蒙版,我需要在白色背景上有一个面具形状全黑的图像.像这样的东西,例如:

星形面具图像

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

self.defaultImageView.mask = self.maskImageView
Run Code Online (Sandbox Code Playgroud)

这没有做任何事情.它刚刚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
Run Code Online (Sandbox Code Playgroud)

结果是图像视图完全消失,不再可见.我在做什么,我忘记了什么或两者兼而有之?

ale*_*nik 17

你应该使用支持透明度的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
}
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

这是一个测试项目,展示它是如何工作的.