来自图像的CGPath

Pio*_*otr 0 cocoa-touch mask calayer uiview cgpath

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

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

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

谢谢!


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

ton*_*lon 6

您需要使用Alpha通道创建图像.根据CALayer's mask属性文档:

一个可选图层,其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;
Run Code Online (Sandbox Code Playgroud)

在浏览器中编码,原谅systactical错误.

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