Cómo renderizar un SKNode a UIImage

Simplemente jugar con SpriteKit y estoy tratando de descubrir cómo capturar un 'agarre' de un SKNode en un UIImage.

Con UIView (o una subclass UIView), he usado la propiedad de layer de la vista para convertirla en un context de charts.

P.ej.

 #import <QuartzCore/QuartzCore.h> + (UIImage *)imageOfView:(UIView *)view { UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, 0.0f); CGContextRef context = UIGraphicsGetCurrentContext(); [view.layer renderInContext:context]; UIImage *viewShot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return viewShot; } 

SKNode no es una subclass de UIView y, por lo tanto, no parece estar respaldado por una capa.

¿Alguna idea de cómo podría hacer un SKNode dado a un UIImage?

Esto capturará toda la escena:

 CGRect bounds = self.scene.view.bounds; UIGraphicsBeginImageContextWithOptions(bounds.size, NO, [UIScreen mainScreen].scale); [self drawViewHierarchyInRect:bounds afterScreenUpdates:YES]; UIImage* screenshotImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); 

Si desea solo una twig de nodo particular, puede esconder todos los nodos que no desea capturar antes de tomar la captura de pantalla. También puede usar el marco acumulado convertido a coorderadas UIKit para capturar solo el área del nodo y sus hijos en cuestión.

Alternativamente, puede get una SKTexture de una parte específica de la jerarquía de nodos:

 SKTexture* tex = [self.scene.view textureFromNode:yourNode]; 

Antes de iOS 9, no había forma de convertir una SKTexture a un UIImage . Ahora, sin embargo, es trivial:

 UIImage *image = [UIImage imageWithCGImage:tex.CGImage];