Ios can';t在SCNView覆盖中获取textureFromNode

Ios can';t在SCNView覆盖中获取textureFromNode,ios,scenekit,Ios,Scenekit,在SceneKit中,我们使用覆盖来绘制SpriteKit节点 ///setup overlays scnView.overlaySKScene = [[AAPLOverlayScene alloc] initWithSize:scnView.bounds.size]; 现在我想绘制一些sknodes树并将其快照到sktexture: SKNode *tmp=[[SKNode alloc] init]; //draw some images on tmp //.... SKTexture

在SceneKit中,我们使用覆盖来绘制SpriteKit节点

///setup overlays
scnView.overlaySKScene = [[AAPLOverlayScene alloc] initWithSize:scnView.bounds.size];
现在我想绘制一些sknodes树并将其快照到sktexture:

SKNode *tmp=[[SKNode alloc] init];
//draw some images on tmp
//....
SKTexture *tmpT = [self.view textureFromNode:tmp]; //crash
在日志中:*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[SCNView textureFromNode:]:发送到实例0x12e5265a0的选择器无法识别”

正如我看到的,它说的是“SCNView”,而不是spritekit。因此,在这种情况下如何从节点获取纹理?


UPD是的,我知道。这是开销,我只需要sknode。

SCNView没有此功能(它没有实现“textureFromNode”)。 也许您可以尝试实例化一个SKView来执行SKNode的快照

SKView *snapshotView = [[SKView alloc] initWithFrame:...];
SKTexture *tmpT = [snapshotView textureFromNode:tmp];

它可以工作,但不幸的是,在一些迭代之后崩溃了,有时是在第2次和第3次。花了一个小时寻找依赖项,但什么都没有。从“SKTexture*tmpT=..”代码中注释可以解决崩溃问题。您何时何地执行此代码?这可能是一个线程安全问题。