带有CALayers的UIGraphicsGetImageFromCurrentImageContext

时间:2012-06-15 06:35:33

标签: objective-c cashapelayer quartz-core

我正在尝试使用UIView子图层创建CALayer的图像。使用此代码

- (UIImage*)snapshot{
    UIGraphicsBeginImageContext(self.bounds.size);
    [self.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

我得到一张图片,但它并不能准确反映屏幕上显示的内容。特别是,它不尊重CAShapeLayer掩码属性。我的圆角不会出现在图像中。

以下是屏幕上显示示例的方式与图像显示方式的对比: enter image description here

只是为了澄清,右边的图像放在与旧对象相同的位置,基本上光栅化对象。这就是为什么有相同的背景;它不是我捕捉图像的对象的一部分。

如何在保留图像中的CAShapeLayer蒙版的同时捕获对象的图像?

编辑:似乎是层面罩是问题,而不是路径。

2 个答案:

答案 0 :(得分:1)

不要使用self.bounds.sizeself.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这样的路径属性,这就是我使用掩码的原因。