如何使用CoreAnimation合成模型将UIView层次结构渲染到CGContext中

3

我正在尝试将一个UIView层级结构渲染到CGContext或最终的UIImage中。一些子视图具有3D变换,但是renderInContext:忽略了这些变换以及阴影和一些其他CALayer属性。

来自CALayer.h:

/*
 * WARNING: currently this method does not implement the full
 * CoreAnimation composition model, use with caution. */

- (void)renderInContext:(CGContextRef)ctx;

在调用UIGraphicsBeginImageContext之后,我尝试了几种不同的变化。

[self drawRect:[self bounds]];
[self.layer.delegate drawLayer:self.layer inContext:UIGraphicsGetCurrentContext()];
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
[self.layer display];

最好的情况是视图层次结构不使用3D变换进行渲染。最坏的情况是图像为空。我希望最终得到一个有效的alpha通道图像,因此屏幕截图并不能完全解决问题。

有没有一种方法可以在保留所有变换和图层属性的同时呈现UIView层次结构?

如果解决方案涉及递归迭代视图层次结构,分别将每个视图作为图像单独渲染,并在每个父视图的组合步骤中应用所有变换和属性,那么如何应用3D变换?


你有没有解决这个问题? - kevboh
1个回答

0

很抱歉,但你无法做到这一点。

图层的当前动画状态是私有的,无法访问。 这可能是由于性能原因。启用可动画属性的即时值访问,并使用与核心图形兼容的结构来保存值会降低图形性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接