将场景的 (x, y) 转换为屏幕的 (x, y)

Convert Scene's (x, y) to screen's (x, y)

我有一个使用 SceneKit 构建的应用程序,当前显示多个节点。我可以弄清楚哪个节点被按下,并想用它来使标签出现在被触摸的节点下方。现在,当我按以下方式设置标签的中心时...

nameLabel.center = CGPointMake(CGFloat(result.node.position.x), CGFloat(result.node.position.y+20)

…因为节点在(1, 0)上所以出现在左上角。我认为 sceneView 的 (0, 0) 在屏幕的 center 而实际的 display(0, 0)左上角

有没有办法将两个不同的数字相互转换? (我可以硬编码,因为我知道节点在哪里,或者为每个节点创建一个单独的标签,但这并不是一个真正完美的解决方案。)

提前致谢:)

您可以使用projectPoint:方法:

var projected = view.projectPoint(result.node.position))   
//projected is an SCNVector3
//projected.x and y are the node's position in screen coordinates
//projected.z is its depth relative to the near and far clipping planes
nameLabel.center = CGPointMake(CGFloat(projected.x), CGFloat(projected.y+20)