iOS tomando fotos de forma programática

Sé que esto es posible, lo vi en algunas aplicaciones (iGotYa es que creo que es el más famoso). Sé cómo configurar todo para tomar fotos, savelas y todo. ¿Pero cómo se puede hacer mediante progtwigción? simplemente haciendo que el usuario click un button (en el controller de vista normal) y automáticamente tomará una foto usando la camera frontal y guardándola (o no, obteniéndola como un UIImage)

¡Gracias!

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

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

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

Editar: para ser más detallado.

1) Configura su configuration de captura utilizando AVFoundation.

  • Configura la input de la camera en frontal, apaga el flash, etc.

2) Saltas la parte donde se establece la capa de vista previa de video.

3) Llama al método captureStillImageAsynchronouslyFromConnection: completionHandler: siempre que quieras que se tome 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 sé hacer es capturar un fotogtwig de un video (no activa el flash).

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

  1. Obviamente, el dispositivo necesita tener una camera
  2. Debe ocultar los controles de la camera.
  3. Luego simplemente use el método takePicture de UIImagePickerController

A continuación hay un ejemplo simple que típicamente activaría después de presionar un button

 - (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 usa AVFoundation para tomar fotos.

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

Viene con CocoaPods.

En el file .h

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

En el file .m

 @interface ABCViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> - (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]; }