2012-03-03 7 views
18

Voy a hacer una pregunta que quizás ya se haya preguntado un millón de veces.Seleccionar múltiples imágenes de la biblioteca de fotos

Estoy haciendo una aplicación para iPad y quiero brindarles a los usuarios la posibilidad de seleccionar múltiples imágenes desde su fototeca. Ya tengo un código de trabajo para que el usuario seleccione una imagen a la vez. (No es lo que necesito)

Ya he descargado y revisado el código de muestra del selector de imágenes ELC, pero ese código no es compatible con iOS 5 o Xcode 4. Es decir, tiene ARC y compila problemas de izquierda a derecha. dealloc por todo el lugar.

Estoy frustrado de que Apple no haya creado una aplicación integrada para desarrolladores para esta funcionalidad más solicitada en la mayoría de nuestras aplicaciones de iPhone/ipad. (no una, sino fotos de selección múltiple)

¿Hay algún otro código de muestra disponible? Confía en mí, he estado buscando en Google por un tiempo.

+5

Convertirlo a ARC no es difícil ... –

Respuesta

21

Ok, me han dado cuenta de esto. El problema con la Biblioteca de Activos es que le da todos los datos GEO de la imagen. Lo que eso significa para los usuarios que utilizan su aplicación es que recibirán un mensaje indicándoles que su aplicación está intentando acceder a su ubicación. De hecho, todo lo que intenta hacer es dejarles elegir múltiples imágenes de su álbum de fotos. La mayoría de los usuarios estarán apagados pensando que es un problema de piratería. El mejor enfoque es usar manzanas api de imagePickerController. Sé que le permite elegir una imagen a la vez, pero si agrega el siguiente código, le permitirá elegir varias imágenes.

De la manera en que lo estoy haciendo es permitir que los usuarios sigan seleccionando las imágenes que desean, siga guardando esos archivos en el directorio de documentos de la aplicación, hasta que presionen el botón de hecho. Vea aquí mi código de ejemplo y es de esperar que le ahorrará el dolor de pasar por elementos de bibliotecas

-(IBAction)selectExitingPicture 
{ 
    //Specially for fing iPAD 
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage]; 

    popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
    [popoverController presentPopoverFromRect:CGRectMake(0.0, 0.0, 400.0, 300.0) 
          inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionAny 
          animated:YES]; 
} 

//Done button on top 
- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated 
{  
    //NSLog(@"Inside navigationController ..."); 


    if (!doneButton) 
    { 
     doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                 style:UIBarButtonItemStyleDone 
                target:self action:@selector(saveImagesDone:)]; 
    } 

    viewController.navigationItem.rightBarButtonItem = doneButton; 
} 

- (IBAction)saveImagesDone:(id)sender 
{ 
    //NSLog(@"saveImagesDone ..."); 

    [popoverController dismissPopoverAnimated:YES]; 
} 


-(void)imagePickerController:(UIImagePickerController *)picker 
     didFinishPickingImage : (UIImage *)image 
       editingInfo:(NSDictionary *)editingInfo 
{ 


    //DONT DISMISS 
    //[picker dismissModalViewControllerAnimated:YES]; 
    //[popoverController dismissPopoverAnimated:YES]; 

     IMAGE_COUNTER = IMAGE_COUNTER + 1; 

     imageView.image = image; 

     // Get the data for the image 
     NSData* imageData = UIImageJPEGRepresentation(image, 1.0); 


     // Give a name to the file 
     NSString* incrementedImgStr = [NSString stringWithFormat: @"UserCustomPotraitPic%d.jpg", IMAGE_COUNTER]; 


     NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString* documentsDirectory = [paths objectAtIndex:0]; 

     // Now we get the full path to the file 
     NSString* fullPathToFile2 = [documentsDirectory stringByAppendingPathComponent:incrementedImgStr]; 

     // and then we write it out 
     [imageData writeToFile:fullPathToFile2 atomically:NO]; 

} 

// Ahora usar este código para llegar al usuario seleccionado imágenes.Llamarlo desde cualquier lugar que desee en su código

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES); 
     NSString* documentsPath = [paths objectAtIndex:0]; 
     NSString* dataFile = [documentsPath stringByAppendingPathComponent:@"UserCustomPotraitPic1.jpg"]; 

     NSData *potraitImgData = [NSData dataWithContentsOfFile:dataFile]; 
     backgroundImagePotrait = [UIImage imageWithData:potraitImgData]; 
+0

Hola ... en lugar de seleccionar imágenes de la biblioteca de fotos, quiero seleccionar las imágenes del directorio de la aplicación privada. Mi pregunta es ¿El controlador de selector de ELCImage está destinado a seleccionar múltiples imágenes solo de la biblioteca de fotos o también se puede hacer para el directorio de la aplicación privada? –

+2

Gracias usando el código ur pude personalizar el controlador uiimagepickerview. Ahora quiero indicar al usuario que ya se ha seleccionado una foto de imagepicker por samll image en la esquina derecha de la imagen. Cualquier ayuda .. – srividya

+0

Hola, ¿me pueden ayudar a actualizar el diseño de imágenes seleccionadas en UIImagePickerController? – Iya

9

Apple ha proporcionado una API para esto. Se llama ALAssetsLibrary.

Al usar esto, puede seleccionar múltiples imágenes/videos y otras operaciones que realice mediante la aplicación de fotos en el dispositivo iOS.

Como en documentation Apple dice:

elementos de bibliotecas marco

Introducido en iOS 4.0, el marco de elementos de bibliotecas (AssetsLibrary.framework) proporciona una interfaz basada en consultas para recuperación de fotos y vídeos desde el dispositivo del usuario. Con este marco , puede acceder a los mismos recursos que normalmente administra la aplicación Fotos, incluidos los elementos en el álbum fotos del usuario y las fotos y videos que se importaron en el dispositivo. También puede guardar nuevas fotos y videos en el álbum de fotos guardado del usuario.

Aquí hay algunos enlaces donde puede obtener más información. Ahora para usarlo puedes buscar ALAssetsLibrary.

Assets Library Reference

http://www.fiveminutes.eu/accessing-photo-library-using-assets-library-framework-on-iphone/

1

utilizo ALAssetsLibrary y rodé mi propia interfaz de usuario. El problema con UIImagePickerController es que dice que se supone que debe descartar el controlador de vista en la devolución de llamada didFinishPickingMediaWithInfo, por lo que puede tener problemas al hackear la selección múltiple al no descartar. Sé que lo hice cuando lo probé por primera vez. No recuerdo exactamente qué salió mal, pero hubo casos en los que UIImagePickerController simplemente dejaron de funcionar si no lo descartaba como dicen los documentos.

Cuestiones relacionadas