gpt4 book ai didi

ios - 如何将标签/UIView 固定到 ARKit 中的节点

转载 作者:搜寻专家 更新时间:2023-10-31 22:17:55 25 4
gpt4 key购买 nike

我想让 UILabel 位于 ARKit 中的节点之上,类似于 iOS 12 的 Measure 应用程序中的尺寸标签。我试过将标签添加为平面节点并使用广告牌约束,但是当你离开时文本会变小,这并不理想。在 WWDC 上,他们将此称为屏幕空间,但没有说明如何实现它。

提前致谢! enter image description here

最佳答案

我想出了以下解决方案来使其工作。

首先,我创建了 UILabel 并将其添加为 subview 。接下来,我将要跟随的节点的位置转换为 renderer(_: updateAtTime:) 中的屏幕坐标。现在标签正确地跟随节点并保持固定比例。但是,标签与屏幕保持水平,这看起来很奇怪。为了使其与世界保持水平,我根据 ARCamera 的偏航(z 旋转)旋转标签。

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {

// Convert the node's position to screen coordinates
let screenCoordinate = self.sceneView.projectPoint(node.position)

DispatchQueue.main.async {
// Move the label
label.center = CGPoint(x: CGFloat(screenCoordinate.x), y: CGFloat(screenCoordinate.y))

// Hide the label if the node is "behind the screen"
label.isHidden = (screenCoordinate.z > 1)

// Rotate the label
if let rotation = sceneView.session.currentFrame?.camera.eulerAngles.z {
label.transform = CGAffineTransform(rotationAngle: CGFloat(rotation + Float.pi/2))
}
}

}

关于ios - 如何将标签/UIView 固定到 ARKit 中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50997604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com