【发布时间】:2019-06-27 03:37:32
【问题描述】:
我是第一次使用 Swift ARKit,在我的渲染器 didUpdate 方法中,我为用户提供了更改正在渲染的图像的选项。当他们更改图像时,我创建一个新图像(使用调整大小的图像)并将该图像用于 faceGeometry 节点的内容。问题是,无论何时发生这种情况,它都会增加大约 50-100mb 的内存使用量,如果他们这样做的次数足够多,那么应用程序就会崩溃。
如何在每次添加新图像时清除旧图像的内存?我错过了一个步骤还是不应该在 didUpdate 方法中更新/创建图像?
func renderer(
_ renderer: SCNSceneRenderer,
didUpdate node: SCNNode,
for anchor: ARAnchor) {
guard let faceGeometry = node.geometry as? ARSCNFaceGeometry,
let faceAnchor = anchor as? ARFaceAnchor
else { return }
if imageChanged {
let material = faceGeometry.firstMaterial!
let resizedImg = resizeImage(image: primaryImage!, targetSize: CGSize(width: imageWidth, height: imageHeight))
let expandedSize = CGSize(width: 1000, height: 1000)
let imageOnBlueCanvas = drawImageOnCanvas(resizedImg, canvasSize: expandedSize, canvasColor: .clear, x: imageX, y: imageY)
let v = UIImageView(image: imageOnBlueCanvas)
material.diffuse.contents = v// Example texture map image.
material.lightingModel = .physicallyBased
imageChanged = false
}
faceGeometry.update(from: faceAnchor.geometry)
}
【问题讨论】:
标签: swift memory uiimage arkit