Utiliser la caméra dans une application iOS (1/3)

Plusieurs solutions existent pour récupérer une image avec la caméra de l’iPhone. La plus simple est d’utiliser UIImagePickerController, un controller qui va se charger d’afficher une vue modale permettant de prendre une photo (ou éventuellement de récupérer une image de la bibliothèque.

Demander l’autorisation

La première chose à faire est de compléter le fichier info.plist avec une ligne qui indique que l’application va avoir besoin de la caméra. La première fois que l’application tentera d’utiliser la caméra, une alerte sera automatiquement affichée pour demander à l’utilisateur son accord. Le texte descriptif ajouté est celui que vous indiquez dans le fichier info.plist en face de la clé Privacy – Camera Usage Description.

Présenter le dialogue

Pour présenter le dialogue de capture d’image, il suffit de créer un UIImagePickerController, d’indiquer que la source souhaitée est la caméra (et pas la bibliothèque d’images), et d’appeler present depuis le controller d’origine.

func presentImagePicker(_ sender: Any) {
  if UIImagePickerController.isSourceTypeAvailable(.camera) {
    let imagePicker = UIImagePickerController()
    imagePicker.sourceType = .camera
    present(imagePicker, animated: true)
  }
  else {
    print("La caméra n'est pas accessible")
  }
}

Terminer le dialogue

Pour gérer la sortie du dialogue UIImagePickerController fait appel à deux fonctions du protocole UIImagePickerControllerDelegate.
Il faut donc ajouter une ligne pour affecter le delegate lors de la création du  UIImagePickerController.

        imagePicker.delegate = self

La fermeture du dialogue est à la charge du delegate avec la fonction dismiss.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo
     info: [UIImagePickerController.InfoKey : Any]) {
        dismiss(animated: true) {
            print("dismiss")
        }
    }
 
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true) {
        print("cancel")
    }
}

Récupérer l’image

Enfin, l’image capturée est disponible dans les infos reçues par le delegate :

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo
     info: [UIImagePickerController.InfoKey : Any]) {
        ...
        let image:UIImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage
        ...
 
    }

Ceci est le code minimal pour faire fonctionner UIImagePickerController. Le controller offre de nombreuses options pour capturer des photos ou des vidéos, ainsi que récupérer des médias depuis la bibliothèque de l’iPhone.

https://developer.apple.com/documentation/uikit/uiimagepickercontroller

Le code source de cet exemple est disponible ici.