Mon application utilise la caméra, je voudrais ajouter une superposition sur l'aperçu de la caméra. Par exemple, je souhaite utiliser un cadre photo lorsque j'utilise Appareil photo. J'aimerais également ajouter une barre personnalisée pour les opérations de l'appareil photo. Aidez-moi à faire de même.
Vous tentez peut-être d'utiliser UIImagePickerController. Mais je connais cette solution à votre problème. Vous pouvez le faire facilement en utilisant les classes AVCamCaptureManager et AVCamRecorder. Apple propose un programme de démonstration sur son site de développement ici . Il s'appelle AVCam. En termes simples, lorsque vous cliquez pour ouvrir la caméra, vous appelez les classes et les méthodes responsables de l'ouverture de la caméra de l'iPhone et de l'enregistrement vidéo ou de la capture audio. Il appelle les mêmes classes qui sont appelées par UIImagePickerController. Ainsi, votre caméra s’ouvrira et commencera à prendre des entrées.
Maintenant, si vous ouvrez le fichier xib de ce projet AVCam, vous trouverez un petit objet UIView. Cette vue est responsable de l'affichage du flux de la caméra. Vous pouvez redimensionner cette vue selon la taille souhaitée et l'entrée de la caméra sera affichée dans cette zone. Vous pouvez également mettre l'image du cadre autour d'elle selon votre choix.
Cela fonctionnait pour moi lorsque je voulais redimensionner le flux d'entrée de l'appareil photo et prendre des photos. J'espère que cela fonctionne pour vous aussi.
Créez un UIImagePickerController à partir de code, ajustez ses propriétés, ajoutez une superposition dessus et avec votre contrôleur, contrôlez ce que vous voulez sur cette superposition: contrôles personnalisés, superposition d'images, etc.
Cela donne quelque chose comme ça:
self.picker = [[UIImagePickerController alloc] init];
self.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
self.picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
self.picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
self.picker.showsCameraControls = NO;
self.picker.navigationBarHidden = YES;
self.picker.toolbarHidden = YES;
self.picker.wantsFullScreenLayout = YES;
// Insert the overlay
self.overlay = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil];
self.overlay.pickerReference = self.picker;
self.picker.cameraOverlayView = self.overlay.view;
self.picker.delegate = self.overlay;
[self presentModalViewController:self.picker animated:NO];
OverlayViewController
est le contrôleur que vous devez écrire pour contrôler tout ce que vous ajoutez à la superposition.
pickerReference
est une propriété que vous pouvez conserver pour envoyer des commandes à la caméra. Par exemple, vous pouvez appeler les éléments suivants depuis IBAction provenant d’un UIButton placé sur l’incrustation:
[self.pickerReference takePicture];
Lisez le Référence de la classe UIImagePickerController , c'est ce que dit la documentation…
Il existe des propriétés pour cela, en particulier les propriétés cameraOverlayView
et showsCameraControls
.
Vous pouvez ainsi masquer les contrôles, fournir une vue de superposition personnalisée et ajouter des sous-vues à cette vue personnalisée pour ajouter des boutons, des cadres, etc.
Version Swift 3 pour réponse d'Oliver:
self.picker = UIImagePickerController()
self.picker.sourceType = .camera
self.picker.cameraCaptureMode = .photo
self.picker.cameraDevice = .rear
self.picker.showsCameraControls = false
self.picker.isNavigationBarHidden = true
self.picker.isToolbarHidden = true
// Insert the overlay
self.overlayViewController = self.storyboard?.instantiateViewController(withIdentifier: "Overlay") as! OverlayViewController
self.picker.cameraOverlayView = self.overlayViewController.view
self.picker.delegate = self.overlayViewController
self.navigationController?.present(self.picker, animated: true, completion: nil)
Protocoles OverlayViewController:
class OverlayViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate