Выровнять подслои CALayer в один слой - PullRequest
2 голосов
/ 09 января 2010

В моем приложении у меня есть один корневой слой и много изображений, которые являются подуровнями rootLayer. Я хотел бы объединить все подслои rootLayer в один слой / изображение, которые не имеют подслоев. Я думаю, что должен сделать это, рисуя все подслои в основном графическом контексте, но я не знаю, как это сделать.

Надеюсь, вы меня поймете, и извините за мой английский.

Ответы [ 2 ]

9 голосов
/ 10 января 2010

Из вашего собственного примера для 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 этот метод не поддерживает вся композиция Core Animation модель. QCCompositionLayer, Слои CAOpenGLLayer и QTMovieLayer не оказываются. Кроме того, слои которые используют 3D-преобразования не являются рендеринга, а также слои, которые определяют backgroundFilters, фильтры, compositingFilter, или значения маски.

1 голос
/ 09 января 2010

Вы все еще хотите, чтобы слой был интерактивным? Если нет, позвоните -renderInContext: и покажите контекст растрового изображения.

...