3

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

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

我得到了一张图像,但它不能准确地代表屏幕上显示的内容。特别是,它不尊重CAShapeLayermask 属性。我的圆角没有出现在图像中。

下面是一个示例在屏幕上的显示方式与它在图像中的显示方式的比较: 在此处输入图像描述

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

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

编辑:似乎问题在于图层蒙版,而不是路径。

4

2 回答 2

1

直接来自 CALayer 类参考:

此外,不渲染...指定背景过滤器、过滤器、合成过滤器或掩码值的图层。

我使用的是面具,而不是 CGPath。(好吧,带有路径的 CALayer 是我的面具,但仍然如此。)

然而,另一个问题是我无法切换到使用路径而不是蒙版,因为我使用的是渐变,而 CAGradientLayer 没有像 CAShapeLayer 这样的路径属性,这就是我使用蒙版的原因。

于 2012-06-15T17:45:18.827 回答
1

而不是使用self.bounds.sizeand self.layer,只需使用圆角的视图。假设如果是imageView那么

- (UIImage*)snapshot
{
    UIGraphicsBeginImageContext(imageview.size);
    [imageview.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}
于 2012-06-15T06:43:24.557 回答