单击按钮Swift

问题描述

我是第一次构建ARkit项目,首先要做的是,我必须在ARSCNView中显示3D Sphere。然后单击按钮时,球体应消失并在其位置显示3D立方体。

我在考虑我的代码:

 @IBOutlet weak var sceneView: ARSCNView!
    var  objectNode: SCNNode?
    var objectScene: SCNScene?

objectScene = SCNScene(named: "sphere.dae")
objectNode = objectScene!.rootNode
sceneView.scene.rootNode.addChildNode(objectNode!)

这是按钮的代码:

@IBAction func cubeButtonClicked(_ sender: UIButton) {
          sceneView.scene.rootNode.enumerateChildNodes { (node,stop) in
            node.removeFromParentNode()
        }
        
        objectScene = SCNScene(named: "cube.dae")    
        objecteNode = objectScene!.rootNode
        sceneView.scene.rootNode.addChildNode(objecteNode!) 
    }
    

我正遇到此错误

[SceneKit] Error: removing the root node of a scene from its scene is not allowed

我做错什么了吗?

解决方法

实际上,错误可以准确说明是什么原因造成的。

已编辑---尝试以下两种方法之一

  • 使用以下代码来避免删除pointOfView即您的SCNCamera
sceneView.scene.rootNode.enumerateChildNodes { (node,_) in
    if node == sceneView.pointOfView {return}
    node.removeFromParentNode()
}
  • 如果仅要删除一个节点(在您的情况下为sphereNode),则无需使用枚举方法。只需持有对该节点的引用,并在需要时将其删除。
sphereNode.removeFromParentNode()
,

我在上面的代码中缺少的是我必须进行删除并添加两个同步任务。由于Delete函数已放入闭包(异步任务)。因此添加功能将在删除之前执行。 到那时,错误将消失。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...