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())