Convierta CATransform3D en CIVector's para CIPerspectiveTransform, reemplace UIGetScreenImage

¿Es posible convertir un CATransform3D en un set de CIVectors para transformar un UIImage con un CATransform3D ?

Creo que finalmente es posible replace la UIGetScreenImage() de aplanar transformaciones 3D de UIView/CALayer en una image al atravesar la jerarquía de vistas y representar imágenes individuales, y luego aplicar CATransform3D a la image que se creó.

Empecé a trabajar con GPUImage , que acepta CATransform3Ds para aplicar a un UIImage y desafortunadamente no tuvo suerte. Adjunto está el código que estaba usando y enlaces a las imágenes que se produjeron.

Captura de pantalla de Simulator

Imagen producida

 - (UIImage*)iterateLayerHierarchy:(CALayer*)layer { UIGraphicsBeginImageContextWithOptions(CGSizeMake(layer.frame.size.width, layer.frame.size.height), NO, 0.0); for (CALayer *sublayer in layer.sublayers) { UIImage* subImage; if (sublayer.sublayers.count > 1) { subImage = [self iterateLayerHierarchy:sublayer]; } else { subImage = [UIView getImageFromLayer:sublayer]; } CGRect imageRect; if (isRetina()) { imageRect = CGRectMake(sublayer.position.x-subImage.size.width/4, sublayer.position.y-subImage.size.height/4, subImage.size.width, subImage.size.height); }else{ imageRect = CGRectMake(sublayer.position.x-subImage.size.width/2, sublayer.position.y-subImage.size.height/2, subImage.size.width, subImage.size.height); } [subImage drawInRect:imageRect]; //sublayer.hidden = YES; } UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return img; } + (UIImage*) getImageFromLayer:(CALayer *)layer { UIGraphicsBeginImageContextWithOptions(CGSizeMake(layer.bounds.size.width, layer.bounds.size.height), NO, 0.0); [layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); if (!CATransform3DEqualToTransform(layer.transform, CATransform3DIdentity)) { GPUImageTransformFilter *transformFilter = [[GPUImageTransformFilter alloc] init]; transformFilter.transform3D = layer.transform; img = [transformFilter imageByFilteringImage:img]; } return img; } 

Si bien no es una respuesta directa a la pregunta, a partir de iOS 7 ya no es necesario resolver este problema. "UIGetScreenImage ()" ha sido reemplazado efectivamente por "drawViewHierarchyInRect:", que puede capturar tanto las capas OpenGL como las vistas basadas en UIKit simultáneamente.