iOS tomando fotos programáticamente

Sé que esto es posible, vi esto en algunas aplicaciones (iGotYa es, creo, el más famoso). Sé cómo configurar todo para tomar fotos, guardarlas y todo. Pero, ¿cómo se puede hacer programáticamente? simplemente haciendo que el usuario haga clic en algún botón (en el controlador de vista normal) y tomará una fotografía automáticamente usando la cámara frontal y guardándola (o no, solo obteniéndola como un UIImage)

¡Gracias!

Esto es muy simple, solo use la guía de referencia AVFoundation :

https://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html

Si no desea que el usuario vea la entrada de vista previa, puede omitir la parte de capa de vista previa del código.

Editar: para ser más detallado.

1) Establece su configuración de captura usando AVFoundation.

  • Configure la entrada de la cámara frontal, apague el flash, etc.

2) PASE la parte donde está configurada la capa de vista previa de video.

3) Llama al método captureStillImageAsynchronouslyFromConnection: completionHandler: siempre que desee tomar la fotografía.

Nota: Si desea que el flash no se escuche y tal vez esté violando los derechos de usuario en algunos países (Japón, por ejemplo). Una solución que conozco para hacerlo es capturando un cuadro de un video (no dispara el flash).

También puede hacerlo sin AVFoundation y, en mi opinión, es una forma más fácil de implementarlo utilizando solo el UIImagePickerController. Hay 3 condiciones:

  1. Obviamente, el dispositivo necesita una cámara
  2. Debes esconder los controles de la cámara
  3. Entonces simplemente use el método takePicture de UIImagePickerController

A continuación se muestra un ejemplo simple que normalmente se activaría después de presionar un botón

 - (IBAction)takePhoto:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypeCamera; picker.cameraDevice = UIImagePickerControllerCameraDeviceFront; picker.showsCameraControls = NO; [self presentViewController:picker animated:YES completion:^ { [picker takePicture]; }]; } 

VLBCameraView es una biblioteca que utiliza AVFoundation para tomar fotos.

En la vista se muestra una vista previa, que luego puede llamar al método VLBCameraView # takePicture mediante progtwigción para tomar una foto.

Viene con CocoaPods.

En archivo .h

 @interface ABCViewController : UIViewController @property (strong, nonatomic) IBOutlet UIImageView *imageView; - (IBAction)takePhoto: (UIButton *)sender; - (IBAction)selectPhoto:(UIButton *)sender; @end 

En archivo .m

 @interface ABCViewController : UIViewController  - (IBAction)takePhoto:(UIButton *)sender { if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Device has no camera" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [myAlertView show]; } else { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypeCamera; [self presentViewController:picker animated:YES completion:NULL]; } } - (IBAction)selectPhoto:(UIButton *)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditing = YES; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController:picker animated:YES completion:NULL]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; self.imageView.image = chosenImage; [picker dismissViewControllerAnimated:YES completion:NULL]; } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { [picker dismissViewControllerAnimated:YES completion:NULL]; }