我是swift的新手,我正试图在ARKit示例中获取相机的位置,但它正在给我nil
。
我使用this question的解决方案并将委托设置为self
,但它仍然没有给我相机变换。
我做错了什么?
class ViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let configuration = ARWorldTrackingSessionConfiguration()
sceneView.session.run(configuration)
}
func session(_ session: ARSession, didUpdate frame: ARFrame) {
print("Hello") // DOES NOT RUN HERE
let currentTransform = frame.camera.transform
}
}
答案 0 :(得分:11)
简单修复,首先是你的类定义:
class ViewController: UIViewController, ARSCNViewDelegate, ARSessionDelegate
然后你需要将自己设置为代表:
sceneView.session.delegate = self
然后一切都正常工作。
答案 1 :(得分:0)
或者,您可以对extension
使用ViewController
,因此可以在其中添加ARSessionDelegate
符合的协议ViewController
:
extension ViewController: ARSessionDelegate {
func session(_ session: ARSession, didUpdate frame: ARFrame) {
let transform = currentFrame.camera.transform
print("Hello") // NOW IT WORKS
}
}
class ViewController: UIViewController, ARSCNViewDelegate {
@IBOutlet var sceneView: ARSCNView!
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self // ARVIEW DELEGATE
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let configuration = ARWorldTrackingConfiguration()
sceneView.session.run(configuration)
sceneView.session.delegate = self // ARSESSION DELEGATE
}
}
希望这会有所帮助。