У меня есть красный SCNNode
, который на полпути парит над синим SCNNode
. Мне нужно dragEvent для них обоих, поэтому, когда они проведены, они двигаются (что работает нормально). Дело в том, что мне нужен только tapEvent для синего узла.
Я пытался следовать этому ответу от до return nil
, если красный узел повернут, чтобы он мог перейти к синий узел. Невозможно вернуть ноль, потому что нет возвращаемого значения: Unexpected non-void return value in void function
.
if hitResult.node.name == "Red" {
return nil // Unexpected non-void return value in void function
}
if hitResult.node.name == "Blue" {
// do something
}
Как я могу игнорировать событие касания, когда красный узел коснулся, и продолжить событие касания до синий узел под ним?
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(nodeWasTapped(_:)))
sceneView.addGestureRecognizer(tapGesture)
func nodeWasTapped(_ recognizer: UITapGestureRecognizer) {
guard let sceneView = recognizer.view as? ARSCNView else { return }
let touchLocation: CGPoint = recognizer.location(in: sceneView)
let hitResults = sceneView.hitTest(touchLocation, options: [:])
if !hitResults.isEmpty {
guard let hitResult = hitResults.first else { return }
if hitResult.node.name == "Red" {
// *** ignore this tap and continue to the blue node ***
}
if hitResult.node.name == "Blue" {
// do something
}
}
}