Cómo seleccionar varias imágenes de UIImagePickerController en ios

Estoy intentando simplemente habilitar la selección de múltiples imágenes de la UIImagePickerController mediante el UIImagePickerController Soy relativamente nuevo en XCode y no entiendo cómo permitir que el usuario elija múltiples imágenes del UIImagePickerControler . Este es mi código actual. Ayude a cualquier persona a elegir varias imágenes de UIImagePickerController .

  -(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { switch(buttonIndex) { case 0: [self takeNewPhotoFromCamera]; break; case 1: [self choosePhotoFromExistingImages]; default: break; } } - (void)takeNewPhotoFromCamera { if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController *controller = [[UIImagePickerController alloc] init]; controller.sourceType = UIImagePickerControllerSourceTypeCamera; controller.allowsEditing = NO; controller.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypeCamera]; controller.delegate = self; [self.navigationController presentViewController: controller animated: YES completion: nil]; } } -(void)choosePhotoFromExistingImages { if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary]) { UIImagePickerController *controller = [[UIImagePickerController alloc] init]; controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; controller.allowsEditing = NO; controller.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; controller.delegate = self; [self.navigationController presentViewController: controller animated: YES completion: nil]; } } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self.navigationController dismissViewControllerAnimated: YES completion: nil]; UIImage *image = [info valueForKey: UIImagePickerControllerOriginalImage]; NSData *imageData = UIImageJPEGRepresentation(image, 0.1); } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker; { [self.navigationController dismissViewControllerAnimated: YES completion: nil]; } 

Con UIImagePickerController puede get solo una image. Si necesita elegir más, necesita un selector de imágenes personalizado, como ELCImagePickerController . ¡Funciona bien! Puede downloadlo aquí .

Como todo lo dicho anteriormente, no es posible usar ImagePickerController. Necesitas hacerlo personalizado. Apple presentó recientemente la biblioteca PHASSET, que lo hace más fácil. También hay un código de muestra en la biblioteca de desarrolladores. Estoy dejando los pasos aquí.

  1. Configura tu propia vista de colección
  2. Cargue la vista de colección con imágenes de la galería (usando PHAsset, explicado a continuación)
  3. Muestre cada una de las imágenes en su cellForItemAtIndexPath (utilizando PHAsset, explicado a continuación)
  4. En your didSelectItemAtIndexPath, realice un seguimiento de las imágenes seleccionadas y agregue una image de marca de verificación. Agréguelo a una matriz local
  5. Cuando termine, lea desde el set de imágenes y el process.

Código de fragment para cargar imágenes de la galería.

  // Create a PHFetchResult object for each section in the table view. @property (strong, nonatomic) PHFetchResult *allPhotos; PHFetchOptions *allPhotosOptions = [[PHFetchOptions alloc] init]; allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]; if ( _isVideo == YES){ _allPhotos = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:allPhotosOptions]; } else { //_allPhotos = [PHAsset fetchAssetsWithOptions:allPhotosOptions]; _allPhotos = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:allPhotosOptions]; } 

Ahora obtendrá todas las imágenes en su array _allPhotos que usará como a continuación en el cellForItemAtIndexPath

  PHAsset *asset = self.allPhotos[indexPath.item]; //cell.representedAssetIdentifier = asset.localIdentifier; cell.selectedTick.hidden = YES; cell.isSelected = NO; // Request an image for the asset from the PHCachingImageManager. [self.imageManager requestImageForAsset:asset targetSize:CGSizeMake(100, 100) contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage *result, NSDictionary *info) { cell.photo.image = result; }]; return cell; 

Eso es todo. Espero que esto ayude.

La razón principal para usar hacks como cambiar el UIImagePickerController hacia arriba y mostrar las imágenes seleccionadas debajo se debió a que la alternativa de la biblioteca de activos implicaría que se le pidiera acceso a la location debido a la información sobre dónde se tomó la fotografía disponible en los metadatos de la image.

En iOS 6 se le pregunta al usuario si quiere permitir que la aplicación acceda a sus fotos (no a la location) y se le hace esta pregunta tanto para el enfoque de biblioteca de activos como para el enfoque UIImagePickerController.

Como tal, creo que hacks como el anterior están llegando al final de su utilidad. Aquí hay un enlace a una biblioteca que proporciona la selección de múltiples imágenes utilizando la biblioteca de Activos, hay otras.

Codificación feliz !!!

descarta el selector y vuelve a presentar después de 0.1s:

 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self dismissViewControllerAnimated:NO completion:^(){ [self performSelector:@selector(takeNextPhoto:) withObject:picker afterDelay:0.1]; }]; } - (void)takeNextPhoto:(UIImagePickerController *)picker { [self presentViewController:picker animated:NO completion:nil]; }