作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 ARKit 进行 AR 项目。
我想添加一个 UIView 到 ARKit 场景。当我点击一个对象时,我想获取该对象旁边的“弹出窗口”信息。此信息位于 UIView 中。
是否可以将此 UIView 添加到 ARKit 场景中?我将这个 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)
我只得到飞机的白屏,而不是 View 。
最佳答案
实现这一点的最简单(尽管未记录)的方法是将 View Controller 支持的 UIView
设置为 SCNPlane
(或任何其他确实是几何图形,但出于显而易见的原因,它最适合平面)。
let plane = SCNPlane()
plane.firstMaterial?.diffuse.contents = someViewController.view
let planeNode = SCNNode(geometry: plane)
您必须将 View Controller 保留在某个地方,否则它将被释放并且平面将不可见。仅使用 UIView
而没有任何 UIViewController
将引发错误。
它最好的一点是它保留了所有的手势并且实际上就像一个简单的 View 一样工作。例如,如果您使用 UITableViewController
的 View ,您将能够在场景中直接滚动它。
我还没有在 iOS 10 及更低版本上测试过它,但到目前为止它一直在 iOS 11 上运行。适用于普通 SceneKit 场景和 ARKit。
关于ios - ARKit:如何将 UIView 添加到 ARKit 场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48700939/
我是一名优秀的程序员,十分优秀!