我想裁剪 View 的一部分。我关注了这篇文章:"How to mask one UIView using another UIView" ,这是我当前的代码:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/// show a green border around the image view's original frame
let backgroundView = UIView(frame: CGRect(x: 50, y: 50, width: 200, height: 300))
backgroundView.layer.borderColor = UIColor.green.cgColor
backgroundView.layer.borderWidth = 4
view.addSubview(backgroundView)
let imageView = UIImageView(frame: CGRect(x: 50, y: 50, width: 200, height: 300))
imageView.image = UIImage(named: "TestImage")
imageView.contentMode = .scaleAspectFill
imageView.clipsToBounds = true
view.addSubview(imageView)
// MARK: - Mask code
let maskView = UIView(frame: CGRect(x: 80, y: 100, width: 100, height: 100))
maskView.backgroundColor = .blue /// ensure opaque
view.addSubview(maskView)
imageView.mask = maskView
}
}
面具工作正常:
但是,我希望 ImageView 中被裁剪的部分仍然存在,但只是具有较低的 Alpha。它应该是这样的:
我尝试更改 maskView.alpha
至0.25
,但这只会使带有 mask 的部分变得不那么不透明。
如何使裁剪掉的部分仍然存在,但只是更透明一点?
我最好不想创建另一个 View ,因为最终我将在相机预览图层上使用它 - 额外的 View 可能会降低性能。
我尝试添加一个具有较少 alpha 背景颜色的 subview :
let maskView = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 300))
maskView.backgroundColor = UIColor.blue.withAlphaComponent(0.3)
let maskView2 = UIView(frame: CGRect(x: 80, y: 100, width: 100, height: 100))
maskView2.backgroundColor = UIColor.blue.withAlphaComponent(1)
maskView2.alpha = 0
maskView.addSubview(maskView2)
imageView.mask = maskView
但这就是结果:
最佳答案
这一切都取决于您为蒙版绘制的颜色的透明度。 (色调——我们通常认为的颜色——是无关紧要的。)遮蔽取决于透明度。 mask 部分透明的区域将使 mask View 部分透明。
因此,将蒙版设置为目标 View 的整个大小,并将整个蒙版设置为部分透明的颜色,除了中心区域为不透明的颜色。
关于ios - 如何使用蒙版裁剪 View ,但使裁剪掉的部分部分不透明而不是隐藏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66619237/