将CALayer子图层展平为一个图层

时间:2010-01-09 19:41:48

标签: objective-c cocoa core-animation core-graphics

在我的应用程序中,我有一个根层,以及许多图像是rootLayer的子图层。我想将rootLayer的所有子图层压缩成一个图层/图像,没有任何子图层。我想我应该通过在核心图形上下文中绘制所有子图层来做到这一点,但我不知道该怎么做。

我希望你能理解我,对不起我的英语。

2 个答案:

答案 0 :(得分:9)

从您自己的Mac OS X示例:

CGContextRef myBitmapContext = MyCreateBitmapContext(800,600);
[rootLayer renderInContext:myBitmapContext];
CGImageRef myImage = CGBitmapContextCreateImage(myBitmapContext);
rootLayer.contents = (id) myImage;
rootLayer.sublayers = nil;
CGImageRelease(myImage);

的iOS:

UIGraphicsBeginImageContextWithOptions(rootLayer.bounds.size, NO, 0.0);
[rootLayer renderInContext: UIGraphicsGetCurrentContext()];
UIImage *layerImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
rootLayer.contents = (id) layerImage.CGImage;
rootLayer.sublayers = nil;

另请注意文档中的警告:

  

Mac OS X v10.5的实现   这种方法不支持   整个核心动画组合   模型。 QCCompositionLayer,   CAOpenGLLayer和QTMovieLayer图层   没有呈现。另外,层   使用3D变换的人不是   渲染,也不是指定的图层   backgroundFilters,过滤器,   compositingFilter,或掩码值。

答案 1 :(得分:1)

您是否仍希望图层具有交互性?如果没有,请调用-renderInContext:并显示位图上下文。