В проекте ARKit, когда пользователь касается экрана, я хочу получить rootNode
элемента, с которым пользователь хочет взаимодействовать.
Тест Gesture & Hit
func screenTapped(_ sender: UITapGestureRecognizer) {
let hitTestResult = sceneView.hitTest(touchLocation)
if let result = hitTestResult.first {
guard let rootNode = getRoot(for: result.node) else {return}
...
}
Рекурсивная функция для получения корневого узла
func getRoot(for node: SCNNode) -> SCNNode? {
if let node = node.parent {
return getRoot(for: node)
}
else {
return node
}
}
Но мне кажется странным, что Swift не предлагает что-то по умолчанию, предлагая рекурсивные методы для дочерних узлов.
- Есть ли альтернативный / лучший подход к этому?
- Должен ли я написать эту функцию как расширение для
SCNNode
?