2013-12-17 8 views
7

Ich spiele nur mit SpriteKit herum und versuche herauszufinden, wie man einen "SKNode" in ein UII-Bild "einfängt".Wie man einen SKNode zu UIImage macht

Mit UIView (oder einer UIView-Unterklasse) habe ich die layer-Eigenschaft der Ansicht zum Rendern in einen Grafikkontext verwendet.

Eg.

SKNode ist keine Unterklasse von UIView und wird daher nicht von einer Ebene unterstützt.

Irgendwelche Ideen, wie ich über das Rendern eines gegebenen SKNode zu einem UIImage gehen könnte?

Antwort

9

Dies wird die gesamte Szene erfassen:

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

Wenn Sie nur einen bestimmten Knoten Zweig möchten Sie alle Knoten verstecken können Sie vor der Einnahme den Screenshot aufnehmen möchten nicht. Sie können auch den akkumulierten Rahmen verwenden, der in UIKit Koordinaten konvertiert wurde, um nur den Bereich des Knotens und seiner untergeordneten Elemente zu erfassen.

Alternativ können Sie auch ein SKTexture von einem bestimmten Teil der Knotenhierarchie erhalten:

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

Vor iOS 9, gibt es nicht Art und Weise war ein SKTexture zurück zu einem UIImage zu konvertieren. Jetzt ist es jedoch trivial:

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

Vielen Dank. Die Ergebnisse sollten wieder im Sprite Kit verwendet werden - also TexturFromNode: hat wunderbar funktioniert. Prost! –

+0

@ learncocos2d ist dies immer noch der beste Weg, dies zu tun? –

+0

@StevenRitchie Leider Ja. – ColdSteel