没有在ARKit

时间:2017-08-04 23:34:32

标签: ios swift scenekit augmented-reality arkit

我是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
    }
}

2 个答案:

答案 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
    }
}

希望这会有所帮助。