web-dev-qa-db-fra.com

Impossible d'activer la contrainte avec les ancres

Donc, j'essaie de créer une sceneView par programme

class ViewController: UIViewController, ARSCNViewDelegate {
    var sceneView: ARSCNView = ARSCNView()
    let configuration = ARWorldTrackingConfiguration()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints, ARSCNDebugOptions.showWorldOrigin]
        self.configuration.planeDetection = .horizontal
        self.sceneView.session.run(configuration)
        self.sceneView.delegate = self
        self.sceneView.autoenablesDefaultLighting = true

        //add autolayout contstraints
        self.sceneView.translatesAutoresizingMaskIntoConstraints = false
        self.sceneView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
        self.sceneView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
        self.sceneView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
        self.sceneView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true

    }

    func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
        guard anchor is ARPlaneAnchor else {return}
    }
}

Mais je reçois ce message d'erreur:

Arrêt de l'application en raison d'une exception non interceptée 'NSGenericException', raison: 'Impossible d'activer la contrainte avec les ancres et parce qu'elles n'ont pas d'ancêtre commun. La contrainte ou ses ancres font-elles référence à des éléments dans différentes hiérarchies de vues? C'est illégal. '

Ça se passe dans la partie \\add autolayout contstraints. Comment puis-je ajouter des contraintes à cet élément?

16
utiq

dan a raison , vous devez ajouter sceneView comme sous-vue avant de pouvoir l'ancrer. Essayez quelque chose comme ceci:

view.addSubview(sceneView)
sceneView.anchor(top: self.view.topAnchor, left: self.view.leftAnchor, bottom: self.view.bottomAnchor, right: self.view.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
37
Thomas Wang