如何使用蒙版图层拍摄一个图层的快照?

3

我给UIView的层添加了一个遮罩:

CGImageRef maskImageRef = [UIImage imageNamed:"Icon.png"].CGImage; 
CALayer maskLayer = [CALayer layer];
maskLayer.contents = (__bridge id)maskImageRef;
self.layer.mask = maskLayer;

然后我使用以下代码从UIView中获取快照:
[self.layer renderInContext:mainViewContentContext];

但是遮罩没有被绘制。

如何使用遮罩绘制self.layer?

特别感谢!


可能是重复的问题:layer.renderInContext不考虑layer.mask吗? - rob mayoff
layerA.renderInContext 在上下文中不会渲染 layerA 的蒙版层。 - OpenThread
2个回答

2
您需要截屏的屏幕,请尝试使用以下代码:

CGRect screenRect =CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-44); 
UIGraphicsBeginImageContext(screenRect.size);

CGContextRef ctx = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:ctx];

UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImageWriteToSavedPhotosAlbum(viewImage, self, nil, nil);

i hope help you.


self.view.layer在执行"renderInContext:"时不会裁剪到它的遮罩层,让人感到十分失望。 - OpenThread

2

解决这个问题的一种方法是使用Quartz函数

在drawRect方法中使用CGContextClipToMask(context, rect, maskImage)

参考CGContextClipToMask示例链接获取帮助


https://dev59.com/eUnSa4cB1Zd3GeqPLBku - Paresh Navadiya
这是一项很大的工作。我必须自己处理蒙版层、主层和视图上的转换。我真的用了四天时间用QuartzCore绘制它们。 - OpenThread

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接