ios Sprite Kit screengrab? ios Sprite Kit screengrab? swift swift

ios Sprite Kit screengrab?


You almost have it, but the problem is as explained in the comment above. If you want to capture SKScene contents, try something like this instead:

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale);[self.view drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();

The solution is to basically use the new method drawViewHierarchyInRect:afterScreenUpdates instead, which is the best we have for now; note, it's not exactly speedy, so doing this in realtime will not be pretty.


As a faster alternative, you can use the textureFromNode method on SKView, which returns an image of the view as an SKTexture. Simply pass the SKScene as the argument:

let texture = skView.textureFromNode(scene)

Or to capture part of the scene:

let texture = skView.textureFromNode(scene, crop: cropRect)


//1: get texture from "someNode"

let texture = skView.textureFromNode(someNode)

//2: get UIImage from the node texture

let image = UIImage(cgImage: texture!.cgImage())