IOS:无法更改CAShapeLayer的颜色

时间:2017-03-31 22:33:10

标签: ios objective-c mask cashapelayer

我想创建一个图层作为我在界面构建器中创建的UIImageView的掩码。但是,无论我做什么,图层都保持白色。代码是非常简单的任何想法是什么导致这种行为?

UIImage* image = [UIImage imageNamed:@"face"];
self.imageView.image = image;

CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
maskLayer.frame = self.imageView.bounds;
maskLayer.fillColor = [[UIColor blackColor] CGColor];
maskLayer.path = CGPathCreateWithRect(self.imageView.bounds, NULL);

self.imageView.layer.mask = maskLayer;
self.maskLayer = maskLayer;

我编辑了代码并添加了路径,但它仍然不起作用。

2 个答案:

答案 0 :(得分:1)

你似乎对面具的含义存在误解。实际上,它是一组用于将透明度注入视图的指令,因此可以打孔。通过视图或多或少的程度(取决于透明度)。它没有颜色。您看到的是白色,因为这是图像视图背后的颜色 - 您在整个图像视图中打了一个洞并使其不可见。

答案 1 :(得分:0)

From the docs

  

图层的Alpha通道决定图层内容的大小   和背景显示。完全或部分不透明的像素允许   要显示的基础内容,但完全透明的像素   阻止该内容。

黑色填充(闭合路径的内部)=不透明像素
闭合路径之外的区域=透明像素
图像将显示在路径的内部区域,而不会显示在该路径的外部。实际颜色无关紧要:当您将图层设置为蒙版时,我们现在感兴趣的是不透明度。

路径与imageView大致相同,因此当面具与imageView边界匹配时,您不会看到任何差异。此外,如果在完全设置几何体之前使用此代码(例如viewDidLoad中),则可能无法获得预期的结果。

马特暗示 - 你需要考虑你的结果。

如果你想要一种黑色的半透明颜色" - 或类似 - 考虑在混合物中添加另一个半透明颜色的层。但这不是面具。