我能够使用以下代码从核心动画层创建一个UIIMAGE:

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

   return image;
}

此代码在我的Calayer派生类中。我遇到的问题是,我有两个是我的层的儿童层,这些层不会被呈现到结果图像。如果我添加标准卡莱斯小时候,它们会变得很好。苹果文件说:

将接收器及其子层渲染到指定的上下文中。

它还说自iPhone OS 2.0以来就可以使用。想知道我是否缺少某些东西,或者是否应该提交雷达。

有什么想法可以阻止儿童现金党员被吸引到图像上吗?

谢谢。

有帮助吗?

解决方案

Calayer机械调用RenderIncontext以创建其位图目录属性。但是在CashApelayer中,该注释中的内容实际上并未呈现到其内容中:

整个形状是在图层内容和其第一个子层之间合成的。

有理由认为RenderIncontext实际上不会将CashApelayer路径置于您的上下文上。但是,我实际上并没有自己尝试。

其他提示

不知道它是否与您相关,但是Renderincontext的Calayer文档中有一张注释:

**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,则包含子视图的总体UIVIEW不会绘制其子视图(这实际上是有意义的,因为它在文档中说的是在文档中说的,如果您调用drawRect,您将负责填充整个区域,而不论超级和子视图实现如何)。我通过在所有子视图上称为DrawRect,将它们传递给他们自己的框架来解决我的问题。

因此,我建议也许从Renderincontext换掉并使用Calayer的drawincontext?您需要覆盖该方法,因为默认情况下它不会执行任何操作。您的子类还需要将上下文移至适当的帧。另外,为了安全起见,您可能需要检查您添加的任何代码都不会影响这些层的正常渲染。

我对此提出了雷达。我看不到文档中它不应该工作的任何原因。如果/何时苹果回复雷达,我会在这里回复。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top