Я работаю с Swift ARKit впервые, и в моем методе рендеринга didUpdate я предоставляю пользователю возможность изменить отображаемое изображение. Когда они меняют изображение, я создаю новое изображение (используя изображение с измененным размером) и использую это изображение для содержимого узла faceGeometry. Проблема в том, что всякий раз, когда это происходит, он добавляет около 50-100 МБ к использованию памяти, и если они делают это достаточно много раз, приложение вылетает.
Как очистить память для старых изображений при каждом добавлении нового изображения? Я пропускаю шаг или мне не нужно обновлять / создавать изображение в методе 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)
}