我正在尝试使UIImageView的周围区域变暗,并保留一部分(我用 mask 定义)。
现在,我正在定义我的 mask 并设置我的imageView.layer.mask,但是,不是使其余图像变暗,而是完全将其删除。
我想要的效果类型示例:
我得到的例子:
引用文档提到该 mask 使用其图层的Alpha,因此我尝试操纵该 mask 的不透明度。但是,这似乎只影响我想单独留下的部分的不透明度,而图像的其余部分仍被完全切掉。
谁能指出我做错了什么?谢谢。
这是我的代码:
CAShapeLayer *mask = [CAShapeLayer layer];
GMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, 1052, 448);
CGPathAddLineToPoint(path, nil, 2, 484);
CGPathAddLineToPoint(path, nil, 54, 1263);
CGPathAddLineToPoint(path, nil, 56, 1305);
CGPathAddLineToPoint(path, nil, 380, 1304);
CGPathAddLineToPoint(path, nil, 1050, 1311);
CGPathCloseSubpath(path);
mask.path = path;
CGPathRelease(path);
//mask.opacity = 0.5; //doesn't affect the surrounding portion, only the cut out area.
self.imageView.layer.mask = mask;
最佳答案
您做错的是首先使用图层蒙版。您正在尝试使图像的区域变暗或变暗。这根本不是图层蒙版所做的!基本上,图层蒙版会穿透现有图层,从而使其背后的所有内容都显示出来。这正是您发现的内容:
是的,因为这就是图层蒙版的作用!如果您不想这么做,为什么要使用图层蒙版?
您只需要在第一个 ImageView 上放置第二个 ImageView (或仅一个子层)即可。它包含您绘制的图像。它是透明的,除非它具有半透明的深色填充。这将使背后的内容变暗。您使用剪切路径来定义没有得到深色填充的区域。
或者,通过合成或可能使用CIFilter在 ImageView 上绘制来更改 ImageView 中的图像。
关于ios - 将半透明蒙版添加到CALayer吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15802756/