web-dev-qa-db-fra.com

Caméra avec vue personnalisée

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.

40
CrazyDev

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.

56
Dip Dhingani

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];
41
Oliver

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.

4
AliSoftware

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 
0
NikeAlive