我在用雅克特。我需要将相机中的视图保存到相册中。所以我在情节串连板中添加了一个按钮和一个如下函数:

@IBAction func saveScreenshot() {
    let snapShot = self.sceneView.snapshot()
    UIImageWriteToSavedPhotosAlbum(snapShot, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
}

@objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
    // ...
}

但当我多次点击按钮时,我的应用程序崩溃了。所以我去“调试导航器”,看到内存上升约30米,一旦我点击按钮(像200米-235米-260米~~~ 500米+)。
怎么了?那我该怎么办?

最佳答案

我在Scenekit中遇到了同样的问题(仅在iOS12上;同样的构建在iOS11上运行良好)。现在我找到了一个解决方法:我使用的是scrender的snapshot(atTime:with:antialasingmode:)方法,而不是SCNView的snapshot()方法。这需要额外的工作:
创建渲染器对象,
将其“场景”属性设置为要渲染的场景,
对齐场景视点。
我已经换了我的
let snapShot = scenView.snapShot
有以下4行(注意:我没有动画,所以时间间隔(0)对我来说是可以的):
let renderer = SCNRenderer(device: MTLCreateSystemDefaultDevice(), options: [:])renderer.scene = scenerenderer.pointOfView = sceneView.pointOfViewlet snapShot = renderer.snapshot(atTime: TimeInterval(0), with: size, antialiasingMode: .none)

关于swift - ARKit ARSCNView.snapshot()内存泄漏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51397382/

10-12 14:33