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.