0

我需要根据图像(任何可能的形状)创建蒙版。我需要:

  1. 使用 CGPath 作为适当的掩码创建 CALayer
  2. 调用 [UIView.layer setMask: with layer above]

所以主要的大问题是如何设置基于黑白图像的CGPath?或者是否可以直接从图像中放置遮罩?

谢谢!


面具的示例图像: 示例掩码

4

2 回答 2

6

您将需要使用 Alpha 通道创建图像。根据CALayer的掩码属性文档:

一个可选层,其 alpha 通道用作蒙版,以在层的背景和将层的内容与其过滤背景合成的结果之间进行选择。

因此,您要用作蒙版的图层需要一个 Alpha 通道。如果要使用图像创建这样的通道,则图像本身需要具有 alpha 通道。因此,您需要将上面发布的黑白蒙版复制到图像的 Alpha 通道中。该特定图像的颜色被忽略。然后加载图像,为其设置图层内容并将该图层用作不同的图层蒙版。周围的东西:

UIImage* imageWithAlphaChannel = [UIImage imageNamed:@"alpha.png"]; // Won't work with jpg
CGImageRef cgImageWithAlpha = [imageWithAlphaChannel CGImage];
CALayer* maskingLayer = [CALayer layer];
maskingLayer.contents = (id)cgImageWithAlpha;

//Assume viewToBeMasked is the view, who's layer needs to be masked
CALayer* layerToBeMasked = viewToBeMasked.layer;
layerToBeMasked.mask = maskingLayer;
maskingLayer.frame = layerToBeMasked.bounds;
//Alternativly use: viewToBeMasked.layer.mask = maskingLayer;

在浏览器中编码,请原谅系统错误。

将所有掩码存储为 png 文件可能会破坏您的应用程序大小。您可以将掩码存储为 jpg,并在运行时使用 CoreGraphics 绘图函数创建适当的 alpha 版本。但这是另一个问题......

于 2011-12-09T10:10:56.007 回答
3

我认为与我不久前做过的事情非常相似。基本上,您需要从 Adob​​e Illustrator 导出文件,然后运行例程将该文件转换为 CGPath。

你会在我对这个问题的回答中找到如何做到这一点:

如何检测/处理弯曲区域的触摸事件?

于 2011-12-08T16:06:15.710 回答