屏蔽 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
,然后将图像视图分配给我想要塑造的 UIImageView
的 mask
属性,如下所示:
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
我想知道如果我想使用蒙版图像让我的 UIImageView
成为特定形状,我需要什么。据我了解,要创建一个蒙版,我需要在白色背景上制作一张全黑蒙版形状的图像。像这样的东西,例如:
首先,这是否足以塑造图像视图,如果可以,我如何在 Swift 3 中完成?我只能找到过时或用 Objective-C 编写的屏蔽代码。我试过简单地将上面的图像分配给 UIImageView
,然后将图像视图分配给我想要塑造的 UIImageView
的 mask
属性,如下所示:
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