我正在使用ARKit。我需要将相机中的视图保存到相册中。因此,我在情节提要中添加了一个按钮,并添加了如下功能:
@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) {
// ...
}
但是,当我多次单击按钮时,我的应用程序崩溃了。因此,我转到“调试导航器”,单击按钮后看到内存增加了约30M(例如200M-235M-260M ~~~~ 500M +)。
发生了什么事?那我该怎么办?
答案 0 :(得分:2)
我在Scenekit中遇到了相同的问题(仅在iOS12上;相同的构建在iOS11上运行正常)。现在,我找到了一种解决方法:不是使用SCNView的snapshot()方法,而是使用SCNRenderer的snapshot(atTime:with:antialiasingMode :)方法。这需要一些额外的工作:
我已经替换了我的
let snapShot = scenView.snapShot
具有以下4行(请注意:我没有动画,因此TimeInterval(0)对我来说还可以):
let renderer = SCNRenderer(device: MTLCreateSystemDefaultDevice(), options: [:])
renderer.scene = scene
renderer.pointOfView = sceneView.pointOfView
let snapShot = renderer.snapshot(atTime: TimeInterval(0), with: size, antialiasingMode: .none)
答案 1 :(得分:0)
我遇到了这个问题,但是发现在主线程上调用快照方法可以解决内存泄漏。