Подтвердить что ты не робот

Выберите несколько изображений из библиотеки фотографий

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

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

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

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

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

4b9b3361

Ответ 1

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

То, как я делаю, позволяет пользователям выбирать фотографии, которые они хотят, сохранять эти файлы в каталоге документов приложения, пока они не нажмут кнопку "Готово". См. Здесь мой пример кода, и, надеюсь, это избавит вас от боли в библиотеке активов.

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

Ответ 2

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

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

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

Структура библиотеки активов

Введенный в iOS 4.0, библиотека библиотеки объектов (AssetsLibrary.framework) предоставляет интерфейс на основе запросов для извлечение фотографий и видео с пользовательского устройства. Используя это, вы можете получить доступ к тем же активам, которым обычно управляют приложение "Фотографии", включая элементы в сохраненных фотографиях пользователей альбом и любые фотографии и видео, которые были импортированы на устройство. Вы также можете сохранить новые фотографии и видео для сохраненных пользователей фотоальбом.

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

Ссылка на библиотеку активов

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

Ответ 3

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