CAShaperLayer -renderInContext不起作用?(CAShaperLayer

2019-09-23 22:20发布

我能够创建使用下面的代码核心动画层一个UIImage:

- (UIImage*)contentsImage;
{
   UIGraphicsBeginImageContext([self bounds].size);
   [self renderInContext:UIGraphicsGetCurrentContext()];
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   return image;
}

此代码是在我的CALayer的派生类。 我遇到的问题是,我有两个CAShapeLayers是我的层不呈现,对所得图像的子层。 如果我添加标准CALayers作为孩子,别让他们渲染的罚款。 苹果的文档说:

呈现接收器和其子层到指定的范围内。

它还说,自从iPhone OS 2.0,它的可用。 不知道是否有什么我失踪或者我是否应该提交雷达。

什么可能保住孩子CAShapeLayers从任何想法越来越吸引到的形象呢?

谢谢。

Answer 1:

该CALayer的机械要求renderInContext创建位图的内容属性。 但在CAShapeLayer,路径属性不实际呈现其内容由本说明的标题为可见:

形状作为一个整体层的内容和它的第一子层之间合成。

按理说这renderInContext实际上不会渲染CAShapeLayer路径到你的环境。 我还没有真正尝试了这一点,为自己不过。



Answer 2:

不知道如果与你有关的,但存在的CALayer文档renderInContext,说在一张纸条:

**Important**: The Mac OS X v10.5 implementation of this method does not
support the entire Core Animation composition model. QCCompositionLayer, 
CAOpenGLLayer, and QTMovieLayer layers are not rendered. Additionally,
layers that use 3D transforms are not rendered, nor are layers that specify 
backgroundFilters, filters, compositingFilter, or a mask values. 
Future versions of Mac OS X may add support for rendering these layers
and properties.

不管怎么说,我结合使用的UIView的drawRect功能与在图像上下文绘图时遇到了类似的问题。 包含子视图不会绘制其子视图,如果我叫drawRect中(这是有道理的,现在居然因为它说,在文档中,如果你拨打的drawRect你负责,无论填充超和子视图实现的是整个区域)的总体的UIView。 我用我所有的子视图刚才打电话的drawRect解决我的问题,通过他们自己的框架。

所以我建议,也许从renderInContext切换拿走并使用的CALayer的drawInContext呢? 你需要覆盖的方法,因为它默认情况下不执行任何操作。 你的子类还需要上下文移动到相应的帧。 同时为了安全起见,你可能要检查没有任何添加影响这些层的正常渲染代码。



Answer 3:

我提交的这个雷达。 我看不到的,因为它不应该干活会回到这里,如果/当苹果回复雷达响应文档的任何原因。



文章来源: CAShaperLayer -renderInContext Doesn't Work?