2012-03-03 6 views
18

Я собираюсь задать один вопрос, который, возможно, уже задан в миллион раз.Выберите несколько изображений из библиотеки фотографий

Я делаю приложение для iPad и хочу дать пользователям возможность многократно выбирать изображения из своей фото-библиотеки. У меня уже есть рабочий код для пользователя, чтобы выбрать одно изображение за раз. (не то, в чем я нуждаюсь)

Я уже загрузил и просмотрел образец кода ELC для выбора изображений, но этот код несовместим с iOS 5 или Xcode 4. то есть он имеет ARC и компилирует проблемы слева и справа, dealloc повсюду.

Я просто разочарован тем, что яблоко еще не создало встроенные в Api разработчики для этой наиболее часто запрашиваемой функциональности в большинстве наших приложений iPhone/ipad. (не одно, а несколько фото)

Есть ли другой образец кода? Поверьте мне, я искал время для поиска.

+5

Преобразование его в ARC не сложно .. –

ответ

21

Хорошо, я это выяснил. Проблема с библиотекой активов заключается в том, что она дает вам все данные GEO изображения. Для пользователей, использующих ваше приложение, это означает, что они получат подсказку о том, что ваше приложение пытается получить доступ к своему местоположению. Infact все, что вы пытаетесь сделать, это позволить им выбрать несколько изображений из своего фотоальбома. Большинство пользователей будут отключены, думая, что это проблема пиратства. Лучший подход - использовать applis api для imagePickerController. Я знаю, что это позволяет вам выбирать один рисунок за раз, но если вы добавите следующий код, он позволит вам выбрать несколько изображений.

Способ, которым я занимаюсь, позволяет пользователям выбирать фотографии, которые они хотят, сохранять эти файлы в каталоге документов приложения, пока они не нажмут кнопку «Готово». Смотрите здесь мой пример кода, и, надеюсь, это сэкономит вам боль проходит через Assets Library

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

} 

// Теперь использовать этот код, чтобы добраться до выбранных пользователем изображений.Назовите это из любого места вы хотите в вашем коде

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

Привет ... вместо того, чтобы выбирать фотографии из библиотеки фотографий, я хочу выбрать изображения из частной папки приложения. Мой вопрос: ELCImage picker controller предназначен для выбора нескольких изображений только из библиотеки фотографий или может быть сделано для частного каталога приложений? –

+2

Спасибо, используя код ur, мне удалось настроить контроллер uiimagepickerview. Теперь я хочу указать пользователю, что фотография уже выбрана из imagepicker по образцу samll в правом углу изображения, как это сделать. Любая помощь .. – srividya

+0

Привет, вы можете помочь мне обновить дизайн выбранных изображений в UIImagePickerController? – Iya

9

Apple предоставила api для этого. Он называется ALAssetsLibrary.

Используя это, вы можете выбрать несколько изображений/видео и другие операции, которые вы используете, используя приложение для фотографий на устройстве iOS.

Как и в documentation Apple, говорит:

Assets Library Framework

Введенный в прошивкой 4.0, структура активов Библиотека (AssetsLibrary.framework) предоставляет интерфейс на основе запросов для ВОССТАНОВЛЕНИЕ фото и видео с устройства пользователя. Используя эту инфраструктуру , вы можете получить доступ к тем же самым активам, которые обычно управляются приложением «Фотографии», включая элементы сохраненных фотографий пользователя и любых фотографий и видео, которые были импортированы на устройство. Вы также можете сохранить новые фотографии и видео обратно в сохраненный фотоальбом .

Вот несколько ссылок, где вы можете узнать больше. Теперь для его использования вы можете искать ALAssetsLibrary.

Assets Library Reference

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

1

Я использую ALAssetsLibrary и помотал собственный пользовательский интерфейс. Проблема с UIImagePickerController заключается в том, что он говорит, что вы должны отклонить контроллер вида в обратном вызове didFinishPickingMediaWithInfo, поэтому взломать множественный выбор, не отпуская, могут столкнуться с проблемами. Я знаю, что сделал, когда впервые попробовал. Я не могу точно вспомнить, что пошло не так, но были случаи, когда UIImagePickerController просто перестали работать, если я не отклонил его, как говорят документы.

Смежные вопросы