我正在使用ARKit进行一个AR项目。
我想在ARKit场景中添加一个UIView。当我点击一个对象时,我想在对象旁边以“弹出窗口”的形式获得信息。这些信息在UIView中。
是否可以将此UIView添加到ARKit Scene?我将此UIView设置为一个场景,然后我可以做什么?我可以给予它一个节点,然后将其添加到ARKit Scene吗?如果可以,它是如何工作的?
还是有别的办法?
谢谢你,谢谢你
编辑:我的SecondViewController的代码
class InformationViewController: UIViewController {
@IBOutlet weak var secondView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
self.view = secondView
}
}
编辑2:firstViewController中的代码
guard let secondViewController = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController else {
print ("No secondController")
return
}
let plane = SCNPlane(width: CGFloat(0.1), height: CGFloat(0.1))
plane.firstMaterial?.diffuse.contents = secondViewController.view
let node = SCNNode(geometry: plane)
我只得到一架飞机的白色屏幕,而不是视图。
3条答案
按热度按时间iqjalb3h1#
要 将 文本 放置 在 世界 中 的 标签 中 , 您 需要 将 其 绘制 到 图像 中 , 然后 将 该 图像 附加 到
SCNNode
。例如 :
中 的 每 一 个
编辑 : 我 添加 了 以下 行 :
格式
这 可以 让 你 设置 背景 颜色 和 不 透明度 。 还有 其他 的 方法 可以 做 这个 - - 也 可以 让 你 画 复杂 的 形状 - - 但是 这 是 最 简单 的 基本 颜色 。
编辑 2 : 添加 了 对
stringSize
和rect
的 引用cu6pst1q2#
最简单的(尽管没有文档记录)实现方法是将视图控制器支持的
UIView
设置为SCNPlane
(或任何其他几何体,但由于显而易见的原因,它最适合平面)上的材质的漫反射内容。你必须将视图控制器保存在某个地方,否则它将被释放,平面将不可见。只使用
UIView
而不使用任何UIViewController
将引发错误。它最好的地方是保留了所有的手势,实际上就像一个简单的视图一样工作。例如,如果你使用
UITableViewController
的视图,你将能够在场景中滚动它。我还没有在iOS10和更低版本上测试过它,但到目前为止它已经在iOS11上工作了。
bq8i3lrv3#
我现在不能提供你的代码,但这是如何做到这一点。
1.创建一个
SCNPlane
。1.使用您需要的所有元素创建
UIView
。1.从
UIView
创建映像上下文。1.使用此图像作为
SCNPlane
的材质。或者更容易使
SKScene
与标签和添加它作为SCNPlane
的材料。示例:https://stackoverflow.com/a/74380559/294884