【发布时间】:2011-12-08 16:00:32
【问题描述】:
我需要根据图像(任何可能的形状)创建蒙版。我需要:
- 使用 CGPath 作为适当的掩码创建 CALayer
- 调用[UIView.layer setMask: with layer above]
所以主要的大问题是如何设置基于黑白图像的CGPath?或者是否可以从图像中直接放置遮罩?
谢谢!
面具的示例图像:
【问题讨论】:
标签: cocoa-touch uiview calayer mask cgpath
我需要根据图像(任何可能的形状)创建蒙版。我需要:
所以主要的大问题是如何设置基于黑白图像的CGPath?或者是否可以从图像中直接放置遮罩?
谢谢!
面具的示例图像:
【问题讨论】:
标签: cocoa-touch uiview calayer mask cgpath
您需要使用 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 版本。但这是另一个问题.....
【讨论】:
我认为与我不久前做过的事情非常相似。基本上,您需要从 Adobe Illustrator 中导出文件,然后运行一个例程将该文件转换为 CGPath。
你会在我对这个问题的回答中找到如何做到这一点:
【讨论】: