Sie*_*ult 27 objective-c ios uigraphicscontext sprite-kit swift
我试图获取一个包含SKScene的视图的屏幕抓取.我使用的技术是:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
这适用于普通的UIViews,但无论出于何种原因,它忽略了SKScene中的所有精灵.
我不确定这是否是一个错误,或者Sprite Kit的渲染是否与UIGraphics分开.
问题:当UIViews的工作方式似乎无法与Sprite Kit一起使用时,或者是否有人使用Sprite Kit使用UIGraphics上下文时,如何获取SKScene的屏幕抓取?
Mat*_*att 30
你几乎拥有它,但问题是在上面的评论中解释的.如果你想捕获SKScene内容,请尝试这样的事情:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, scale);
[self.view drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)
解决方案是基本上使用新方法drawViewHierarchyInRect:afterScreenUpdates,这是我们现在最好的方法; 请注意,这并不是很快,所以实时做这件事并不是很好.
ABa*_*ith 10
作为一种更快的替代方法,您可以使用textureFromNodeon方法SKView,该方法将视图的图像作为一个返回SKTexture.只需传递SKScene参数:
let texture = skView.textureFromNode(scene)
Run Code Online (Sandbox Code Playgroud)
或者捕捉部分场景:
let texture = skView.textureFromNode(scene, crop: cropRect)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3786 次 |
| 最近记录: |