2 votes

L'ARFrame actuelle n'est pas nulle même si l'autorisation de la caméra a été refusée.

J'ai une application ARKit où j'ai besoin d'obtenir la capturedImage de l'actuel ARFrame et l'utiliser pour un traitement ultérieur. Mon code ressemble à peu près à ceci :

guard let frame = sceneView.session.currentFrame else {
  return
}

someMethod(frame)

Maintenant, je m'attends à ce que le cadre soit nil uniquement pendant les premières milisecondes de l'application où ARKit est mis en place, ou si l'autorisation de la caméra est refusée pour cette application. Cependant, lorsque l'application est installée pour la première fois et que je refuse la permission lorsqu'elle est demandée, j'obtiens des images non nulles où chaque pixel est juste noir. Si je relance l'application, j'obtiens nil des cadres comme je le devrais. S'agit-il d'un bogue ou y a-t-il une logique derrière cela ?

0voto

Alok Subedi Points 1278

Je pense que le code de gestion de la permission s'exécute de manière asynchrone et que nous obtenons des trames non nulles avant qu'il ne soit terminé.
J'ai donc essayé ceci dans viewDidLoad :

AVCaptureDevice.requestAccess(for: .video) { (permission) in
    if !permission{
        print("not permited")
    }else{
        print("permited")
        self.scan = true
    }
}

et

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
    if scan{
        guard let frame = sceneView.session.currentFrame else {
            return
        }
        //code
    }
}

Ici, vous laissez votre code s'exécuter uniquement si la permission est accordée par l'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X