2012-03-03 11 views
18

Ho intenzione di porre una domanda che forse è già stata fatta un milione di volte.Seleziona più immagini dalla libreria fotografica

Sto creando un'app per iPad e voglio offrire agli utenti la possibilità di selezionare più immagini dalla loro libreria di foto. Ho già un codice funzionante per l'utente per selezionare un'immagine alla volta. (Non quello che mi serve)

Ho già scaricato e guardato in ELC codice di esempio immagine picker, ma che il codice non è compatibile con iOS 5 o Xcode 4. cioè ha ARC e compilare i problemi a sinistra ea destra, il suo utilizzo e il rilascio dealloc dappertutto.

Sono solo frustrato dal fatto che Apple non abbia già creato un built-in-API per noi sviluppatori per questa funzionalità più richiesta nella maggior parte delle nostre app per iPhone/iPad. (non una ma foto a selezione multipla)

C'è qualche altro codice di esempio disponibile? Fidati di me, sono stato googling per un po '.

+5

Conversione in ARC non è difficile .. –

risposta

21

Ok, ho capito questo. Il problema con la libreria delle risorse è che ti fornisce tutti i dati GEO dell'immagine. Ciò che questo significa per i tuoi utenti che utilizzano la tua app è che riceveranno un messaggio che dice che la tua app sta tentando di accedere alla loro posizione. Infatti tutto quello che stai cercando di fare è lasciare che scelgano più immagini dal loro album fotografico. La maggior parte degli utenti sarà spenta pensando che si tratti di un problema di pirateria. L'approccio migliore è usare mele API di imagePickerController. So che ti permette di scegliere una foto alla volta, ma se aggiungi il seguente codice, ti permetterà di scegliere più immagini.

Il modo in cui sto facendo è lasciare che gli utenti continuino a selezionare le immagini che desiderano, continuando a salvare quei file nella directory dei documenti dell'app, fino a quando non premono il pulsante Fine. Vedi qui il mio codice di esempio e spero che vi farà risparmiare il dolore di passare attraverso elementi di una libreria

-(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]; 

} 

// Ora utilizzare questo codice per ottenere alle immagini selezionate dall'utente.Chiamatela da dove vuoi nel codice

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

Ciao ... invece di selezionare le immagini dalla libreria di foto, voglio selezionare le immagini dalla directory dell'app privata. La mia domanda è ELCImage picker controller è pensato per la selezione di più immagini solo dalla libreria di foto o può essere fatto anche per la directory app privata? –

+2

Grazie al codice ur sono stato in grado di personalizzare il controller uiimagepickerview. Ora voglio indicare all'utente che una foto è già stata selezionata da imagepicker dall'immagine samll nell'angolo destro dell'immagine come fare.Qualsiasi aiuto .. – srividya

+0

Ciao mi puoi aiutare per aggiornare il design delle immagini selezionate in UIImagePickerController? – Iya

9

Apple ha fornito api per questo. Si chiama ALAssetsLibrary.

Utilizzando questo è possibile selezionare più immagini/video e altre operazioni che si fanno utilizzando l'applicazione fotografica sul dispositivo iOS.

Come in documentation Apple dice:

elementi di una libreria quadro

Introdotto in iOS 4.0, il quadro elementi di una libreria (AssetsLibrary.framework) fornisce un'interfaccia basato su query per il recupero di foto e video dal dispositivo dell'utente. Utilizzando questo framework , è possibile accedere alle stesse risorse che sono normalmente gestite dall'applicazione Foto , inclusi gli elementi nelle foto salvate dell'utente e tutte le foto e i video che sono stati importati sul dispositivo. È anche possibile salvare nuove foto e nuovi video nell'album foto salvato dall'utente .

Ecco alcuni link in cui è possibile ottenere ulteriori informazioni. Ora per usarlo puoi cercare ALAssetsLibrary.

Assets Library Reference

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

1

Io uso ALAssetsLibrary e rotolò la mia UI. Il problema con UIImagePickerController è che dice che è necessario chiudere il controller di visualizzazione nella richiamata didFinishPickingMediaWithInfo, quindi l'hacking di selezioni multiple non ignorate può incorrere in problemi. So di averlo fatto quando l'ho provato per la prima volta. Non riesco a ricordare esattamente cosa è andato storto, ma ci sono stati casi in cui UIImagePickerController ha semplicemente smesso di funzionare se non l'ho ignorato come dicono i documenti.

Problemi correlati