将半透明面膜添加到CALayer?

Vad*_*off 5 mask objective-c calayer cashapelayer ios

我试图让我的UIImageView的周围区域变暗,并留下一部分(我用我的面具定义).

现在我正在定义我的蒙版并设置我的imageView.layer.mask,但是不是使图像的其余部分变暗,而是将其完全删除.

我想要的效果类型示例: http://i.imgur.com/vVUiuyk.png

我得到的例子: http://i.imgur.com/5DTXo0S.png

参考文档提到掩码使用它的图层的alpha,所以我试图操纵蒙版的不透明度.然而,这似乎只影响我想要单独留下的部分的不透明度,而图像的其余部分仍然完全被切除.

谁能指出我做错了什么?谢谢.

这是我的代码:

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;
Run Code Online (Sandbox Code Playgroud)

mat*_*att 5

你做错的是首先使用图层蒙版。您正在尝试使图像的某个区域变暗或变暗。这根本不是图层蒙版的作用!基本上,图层蒙版会穿透现有图层,导致其后面的任何内容都显示出来。这正是你发现的:

它完全删除它而不是

是的,因为这就是图层蒙版的作用!如果你不想那样,你为什么要使用图层蒙版?

你需要的是刚刚打好的第二图像视图(或只是一个子层)第一个。它包含您绘制的图像。它是透明的,除非它有半透明的深色填充。那会使它背后的东西变暗。您可以使用剪切路径来定义未填充深色的区域。

或者,通过使用合成或可能使用 CIFilter在图像视图上绘制来更改图像视图中的图像。