我正在尝试获取包含SKScene的视图的屏幕抓图。我使用的技术是:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale); [self.view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
这对于普通的UIViews效果很好,但是无论出于何种原因,它都忽略了SKScene中的所有精灵。
我不确定这是否是错误,或者Sprite Kit的渲染是否与UIGraphics分开。
问题:当适用于UIViews的方式似乎不适用于Sprite Kit或有人成功将UIGraphics上下文与Sprite Kit结合使用时,如何获得SKScene的屏幕截图?
您几乎拥有它,但是问题如上面的注释所述。如果要捕获SKScene内容,请尝试以下类似方法:
SKScene
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale); [self.view drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
解决方案是基本上改用新方法drawViewHierarchyInRect:afterScreenUpdates,这是我们目前拥有的最好方法。请注意,这并不是完全快速的,因此实时执行此操作并不容易。
drawViewHierarchyInRect:afterScreenUpdates