【问题标题】:IOS: Cannot Change Color of CAShapeLayerIOS:无法更改 CAShapeLayer 的颜色
【发布时间】:2017-03-31 22:33:09
【问题描述】:

我想创建一个图层来充当我在界面生成器中创建的 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;

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

【问题讨论】:

  • 这不是重复的,我的代码与其他帖子基本相同,只是我在界面构建器中使用了 UIImageView。有一个很大的不同,与其他帖子不同......我的不起作用,我试图找出原因
  • 您最初提出的问题没有设置路径。在我将其标记为重复后,您进行了编辑以添加路径。现在是一个不同的问题 - 重新打开。
  • 您期望达到什么结果? “它仍然不起作用”不是解释。您正在做的事情似乎很奇怪,所以我无法猜出您的意思要做什么。
  • 我正在尝试实现 Rob 在这篇文章中提供代码的确切效果:stackoverflow.com/questions/20165906/… 但我想制作黑色半透明颜色而不是白色蒙版。出于某种原因,我尝试的所有操作都不会将白色蒙版图层更改为白色以外的颜色。我试图用上面的代码来简化它,只创建一个彩色蒙版,这样我就可以在将它集成到 Rob 的代码中之前了解如何做到这一点。
  • “但我想制作黑色半透明颜色而不是白色蒙版”这没有任何意义。面具没有颜色。它只是或多或少地在视图中打了一个洞。没有所谓的“彩色面具”。 — 这可能就是我们所说的 x-y 问题:您没有问如何为图像视图着色,而是假设您知道蒙版是什么并且蒙版可以做到这一点,并提出了一个有关蒙版的问题。我已经回答了,描述了我认为您对此事的误解。

标签: ios objective-c mask cashapelayer


【解决方案1】:

您似乎对面具是什么有误解。实际上,它是一组指令,用于将透明度注入到视图中,从而或多或少地在视图中“打一个洞”(取决于透明度的程度)。它没有颜色。您看到的是白色,因为这是您的图像视图背后的颜色 - 您在 整个 图像视图上打了一个洞,使其不可见。

【讨论】:

    【解决方案2】:

    From the docs:

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

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

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

    正如马特建议的那样 - 你需要考虑你想要什么结果。

    如果您想要“黑色半透明颜色”或类似颜色,请考虑在混合中添加另一个半透明颜色层。但这不是面具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 2023-04-11
      • 2017-08-24
      • 2012-09-05
      相关资源
      最近更新 更多