open example didfinishpickingmediawithinfo ios uiimagepickercontroller iphone-4

ios - example - use camera swift 4



Habilitar el botón de la biblioteca de fotos en UIImagePickerController (5)

¿Alguien sabe cómo habilitar el botón del álbum de fotos en UIImagePickerController cuando está en el modo de cámara? ¿Cómo la aplicación de la cámara en el iPhone puede alternar entre la toma de imágenes y el video y también tiene el botón para ver la biblioteca de fotos?


Aquí hay una aplicación de ejemplo y una biblioteca muy simple que te permite obtener la foto o elegir de la biblioteca tal como lo hace Facebook. https://github.com/fulldecent/FDTake


Esto se puede hacer a través de las siguientes líneas:

- (void) navigationController: (UINavigationController *) navigationController willShowViewController: (UIViewController *) viewController animated: (BOOL) animated { if (imagePickerController.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) { UIBarButtonItem* button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(showCamera:)]; viewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObject:button]; } else { UIBarButtonItem* button = [[UIBarButtonItem alloc] initWithTitle:@"Library" style:UIBarButtonItemStylePlain target:self action:@selector(showLibrary:)]; viewController.navigationItem.leftBarButtonItems = [NSArray arrayWithObject:button]; viewController.navigationItem.title = @"Take Photo"; viewController.navigationController.navigationBarHidden = NO; // important } } - (void) showCamera: (id) sender { imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; } - (void) showLibrary: (id) sender { imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; }


He hecho esto ajustando la aplicación de ejemplo de PhotoPicker de Apple. He eliminado todos los controles de la cámara y he añadido mi propio botón. Cuando se hace clic, UIImagePickerControllerSourceType se establece en UIImagePickerControllerSourceTypePhotoLibrary.

La parte difícil para mí fue "descartar" (podría ser técnicamente la palabra equivocada) la Biblioteca de fotos después de que se seleccionó la imagen. Hice esto configurando el tipo de fuente de nuevo en UIImagePickerControllerSourceTypeCamera. Esto devuelve la vista de superposición de la cámara.

ViewController.h #import <UIKit/UIKit.h> #import <CoreGraphics/CoreGraphics.h> #import <ImageIO/ImageIO.h> @interface ViewController : UIViewController <UIImagePickerControllerDelegate> { // } @property (nonatomic, strong) UIImagePickerController *imagePicker; - (IBAction)uploadNewPhotoTapped:(id)sender; @end ViewController.m #import "ViewController.h" @interface ViewController () @end @implementation ViewController //Other code - (IBAction)uploadNewPhotoTapped:(id)sender { UIImagePickerController *imagePickController=[[UIImagePickerController alloc]init]; //You can use isSourceTypeAvailable to check if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { imagePickController.sourceType=UIImagePickerControllerSourceTypeCamera; imagePickController.showsCameraControls=YES; // self.usingPopover = NO; } else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {//Check PhotoLibrary available or not imagePickController.sourceType=UIImagePickerControllerSourceTypePhotoLibrary; imagePickController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; } else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) //Check front Camera available or not imagePickController.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum; //else //!!!!!!!!!!!exception imagePickController.delegate=self; imagePickController.allowsEditing=NO; [self presentModalViewController:imagePickController animated:YES]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *originalImage=[info objectForKey:UIImagePickerControllerOriginalImage]; //Do whatever with your image NSData *data = UIImageJPEGRepresentation ( originalImage, 1.0 ); [self dismissModalViewControllerAnimated:YES]; } // Other code @end



Versión Swift2 del código @epsilontik:

//mediaPicker is your UIImagePickerController func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) { if(mediaPicker.sourceType == UIImagePickerControllerSourceType.PhotoLibrary){ let button = UIBarButtonItem(title: "Take picture", style: UIBarButtonItemStyle.Plain, target: self, action: "showCamera") viewController.navigationItem.rightBarButtonItem = button }else{ let button = UIBarButtonItem(title: "Choose picture", style: UIBarButtonItemStyle.Plain, target: self, action: "choosePicture") viewController.navigationItem.rightBarButtonItem = button viewController.navigationController?.navigationBarHidden = false viewController.navigationController?.navigationBar.translucent = true } } func showCamera(){ mediaPicker.sourceType = UIImagePickerControllerSourceType.Camera } func choosePicture(){ mediaPicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary }