В проекте ARKit, когда пользователь касается экрана, я хочу получить rootNode
элемента, с которым пользователь хочет взаимодействовать.
Проверка жестов и ударов
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
?