ios - how - uiimagepickercontrollerdelegate swift 4
Cámara con vista personalizada (4)
Mi aplicación usa cámara, me gustaría agregar una superposición sobre la vista previa de la cámara. Por ejemplo, quiero usar un marco de imagen cuando uso la cámara, también me gustaría agregar una barra personalizada para las operaciones de la cámara. Amablemente ayúdame a hacer lo mismo.
Cree un UIImagePickerController desde el código, ajuste sus propiedades, agregue una superposición en él y, con su controlador, controle lo que quiera en esa superposición: controles personalizados, superposición de imágenes, etc.
Eso da algo como esto:
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
es el controlador que debe escribir para controlar todo lo que agrega a la superposición.
pickerReference
es una propiedad que puedes conservar para enviar pedidos a la cámara. Por ejemplo, puede llamar a lo siguiente de un IBAction proveniente de un UIButton colocado en la superposición:
[self.pickerReference takePicture];
Lea la referencia de la clase UIImagePickerController , eso está en la documentación ...
Existen propiedades para esto, especialmente las propiedades cameraOverlayView
y showsCameraControls
.
De modo que puede ocultar los controles, proporcionar una vista de superposición personalizada y agregar subvistas a esta vista personalizada para agregar botones personalizados, marcos, etc.
Puede estar intentando usar UIImagePickerController. Pero sé que esta es una solución a tu problema. Puede hacerlo fácilmente usando las clases AVCamCaptureManager y AVCamRecorder. Apple tiene una versión de programa de demostración en su sitio de desarrollador here . Se llama AVCam. En palabras simples, lo que hace es cuando hace clic para abrir la cámara, llama a las clases y métodos que son responsables de abrir la cámara del iPhone y grabar video o capturar audio. Llama a las mismas clases que son llamadas por UIImagePickerController. Entonces, su cámara se abrirá y comenzará a recibir información.
Ahora, si abre el archivo xib de ese proyecto AVCam, encontrará un pequeño objeto UIView. Esta vista es responsable de mostrar la alimentación de la cámara. Puede cambiar el tamaño de esa vista según el tamaño que desee y la entrada de la cámara se mostrará en esa área. También puede colocar la imagen de marco alrededor de su elección.
Me funcionó cuando quería cambiar el tamaño del avance de entrada de la cámara y capturar fotos. Espero que funcione para ti también.
Swift 3 versión para respuesta de 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)
Protocolos OverlayViewController:
class OverlayViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate