iphone - personas - Seleccione varias imágenes de la biblioteca de fotos
ordenar fotos por fecha iphone (3)
Voy a hacer esa pregunta que quizás ya se ha preguntado un millón de veces.
Estoy creando una aplicación para iPad y quiero darles a los usuarios la posibilidad de seleccionar varias imágenes de su biblioteca de fotos. Ya tengo un código de trabajo para que el usuario seleccione una imagen a la vez. (No es lo que necesito)
Ya descargué y busqué en 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 problemas de ARC y compilación a la izquierda y a la derecha, su uso de release y dealloc por todas partes.
Estoy frustrado de que Apple no haya creado ya una API integrada para los desarrolladores para esta funcionalidad más solicitada en la mayoría de nuestras aplicaciones de iPhone / iPad. (no una sino varias 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.
Apple ha proporcionado api para esto. Se llama ALAssetsLibrary .
Usando esto, puede seleccionar múltiples imágenes / videos y otras operaciones que realiza usando la aplicación de fotos en un dispositivo iOS.
Como en la documentation Apple dice:
Marco de la biblioteca de activos
Introducido en iOS 4.0, el marco de la Biblioteca de Activos (AssetsLibrary.framework) proporciona una interfaz basada en consultas para recuperar fotos y videos del dispositivo del usuario. Con este marco, puede acceder a los mismos recursos que normalmente administra la aplicación Fotos, incluidos los elementos del álbum de fotos guardadas del usuario y las fotos y videos que se importaron al dispositivo. También puede guardar nuevas fotos y videos en el álbum de fotos guardado del usuario.
Aquí hay algunos enlaces donde puedes aprender más. Ahora para usarlo puedes buscar ALAssetsLibrary.
http://www.fiveminutes.eu/accessing-photo-library-using-assets-library-framework-on-iphone/
Ok, tengo esto resuelto. El problema con la biblioteca de activos es que le proporciona todos los datos GEO de la imagen. Lo que eso significa para sus usuarios que usan su aplicación es que recibirán un mensaje que le indicará que su aplicación está intentando acceder a su ubicación. De hecho, todo lo que intentas hacer es permitirles elegir varias imágenes de su álbum de fotos. La mayoría de los usuarios se apagarán pensando que es un problema de piratería. El mejor enfoque es utilizar manzanas api de imagePickerController. Sé que le permite elegir una foto a la vez, pero si agrega el siguiente código, le permitirá elegir varias imágenes.
Lo que estoy haciendo es permitir que los usuarios sigan seleccionando las imágenes que desean, guarden esos archivos en el directorio de documentos de la aplicación, hasta que presionen el botón de listo. Vea aquí mi código de ejemplo y espero que le ahorre el dolor de ir a través de la Biblioteca de Activos
-(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 usa este código para llegar a las imágenes seleccionadas por el usuario. Llámalo desde donde quieras en tu 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];
Utilizo ALAssetsLibrary
y ALAssetsLibrary
mi propia interfaz de usuario. El problema con UIImagePickerController
es que dice que se supone que debes descartar el controlador de vista en la didFinishPickingMediaWithInfo
llamada didFinishPickingMediaWithInfo
, por lo que hackear la selección múltiple al no descartarla puede didFinishPickingMediaWithInfo
problemas. Sé que lo hice cuando lo probé por primera vez. No puedo recordar exactamente qué fue lo que salió mal, pero hubo casos en los que UIImagePickerController
simplemente dejó de funcionar si no lo UIImagePickerController
como dicen los documentos.