我正在尝试使用UIView
子图层创建CALayer
的图像。使用此代码
- (UIImage*)snapshot{
UIGraphicsBeginImageContext(self.bounds.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
我得到一张图片,但它并不能准确反映屏幕上显示的内容。特别是,它不尊重CAShapeLayer
掩码属性。我的圆角不会出现在图像中。
以下是屏幕上显示示例的方式与图像显示方式的对比:
只是为了澄清,右边的图像放在与旧对象相同的位置,基本上光栅化对象。这就是为什么有相同的背景;它不是我捕捉图像的对象的一部分。
如何在保留图像中的CAShapeLayer
蒙版的同时捕获对象的图像?
编辑:似乎是层面罩是问题,而不是路径。
答案 0 :(得分:1)
不要使用self.bounds.size
和self.layer
,只需使用角落为圆角的视图即可。
假设它是imageView
那么
- (UIImage*)snapshot
{
UIGraphicsBeginImageContext(imageview.size);
[imageview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
答案 1 :(得分:1)
直接来自CALayer Class引用:
此外,不会渲染...指定backgroundFilters,filters,compositingFilter或掩码值...的图层。
我正在使用面具,而不是CGPath。 (好吧,带路径的CALayer是我的面具,但仍然。)
然而,另一个问题是我无法切换到使用路径而不是掩码,因为我使用渐变而CAGradientLayer没有像CAShapeLayer这样的路径属性,这就是我使用掩码的原因。