【问题标题】:How to remove a node and add a new one Swift如何删除一个节点并添加一个新的 Swift
【发布时间】:2017-10-04 19:04:19
【问题描述】:

我需要你的帮助。

我正在尝试删除一个节点并在关闭前一个节点后加载一个新节点。

实际上我可以在一个单独的函数中删除它:

sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
            node.removeFromParentNode()
        }

但在那之后我回忆起“addChild”函数,新节点没有出现在场景中。

 func addChild(object: String){
        if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {

            let path = dir.appendingPathComponent(object)

            //reading
            do {
                scene = try SCNScene(url: path)
                node = scene.rootNode

            }
            catch {/* error handling here */}
        }
        counter += 1

    }

"addChild" 将数组的一个元素作为参数,每次调用 func 后,计数器都会将指针移动到数组的另一个元素。

EX:我有一个包含两个元素的数组,我希望第一次显示的对象始终是第一个,然后当我触摸该对象时,它将被删除并且必须调用 func addChild通过这种方式,前一个元素从数组中删除,并且由于将指针移动到下一个元素的计数器将加载下一个元素。

我不知道我的例子是否足够解释。 先感谢您!

【问题讨论】:

  • 因为第一个元素显示在场景中,所以它进入了内部......

标签: swift xcode scenekit arkit


【解决方案1】:

修复了只调用函数内部的“sceneView.scene = scene”,每次调用函数 removeChild 时从数组中删除元素。

func addChild(object: String){ if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {

        let path = dir.appendingPathComponent(object)

        //reading
        do {
            scene = try SCNScene(url: path)
            node = scene.rootNode
            sceneView.scene = scene
        }
        catch {/* error handling here */}
    }


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    相关资源
    最近更新 更多