小编典典

ios Sprite Kit屏幕截图?

swift

我正在尝试获取包含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的屏幕截图?


阅读 299

收藏
2020-07-07

共1个答案

小编典典

您几乎拥有它,但是问题如上面的注释所述。如果要捕获SKScene内容,请尝试以下类似方法:

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

解决方案是基本上改用新方法drawViewHierarchyInRect:afterScreenUpdates,这是我们目前拥有的最好方法。请注意,这并不是完全快速的,因此实时执行此操作并不容易。

2020-07-07