В файле ViewController.swift , внутри расширения View Controller и метода rendering()
, добавьте метод DispatchQueue.main.async
.
DispatchQueue
управляет выполнением работыПредметы.Каждый рабочий элемент, отправленный в очередь, обрабатывается в пуле потоков, управляемых системой.
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
DispatchQueue.main.async {
guard let faceAnchor = anchor as? ARFaceAnchor else { return }
self.currentFaceAnchor = faceAnchor
if node.childNodes.isEmpty, let contentNode = self.selectedContentController.renderer(renderer, nodeFor: faceAnchor) {
node.addChildNode(contentNode)
}
}
}
}
Кроме того, преобразуйте Swift 4.2 вашего проекта в код Swift 5.0 и используйте цель iOS 12.2.
И, возможно, этот блок кода может быть более полезным, чем предыдущий:
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
DispatchQueue.global().async {
guard let faceAnchor = anchor as? ARFaceAnchor else { return }
self.currentFaceAnchor = faceAnchor
DispatchQueue.main.async {
if node.childNodes.isEmpty, let contentNode = self.selectedContentController.renderer(renderer, nodeFor: faceAnchor) {
node.addChildNode(contentNode)
}
}
}
}
}
Вот сообщения моей области отладки:
![enter image description here](https://i.stack.imgur.com/KFLBY.png)