Выбор элемента от фото библиотеки

В дополнение к использованию a UIImagePickerController экземпляр для получения новых изображений и фильмов можно использовать его для представления браузера носителей, позволяющего пользователю выбрать элемент из их сохраненных фотоальбомов. Шаги Вы взятие подобны тем для получения носителей, как описано в Снимании и Фильмах. Различия:

Эта глава объясняет, как использовать контроллер средства выбора изображения и делегата к просмотру и выбору сохраненных картинок и фильмов. Если стандартные носители, просматривающие UI, не удовлетворяют Вашим потребностям, можно создать полностью настраиваемое решение с UIKit и платформой Библиотеки Активов. Посмотрите Ссылку Платформы Библиотеки Активов.

Создание и конфигурирование браузера носителей

Большинство устройств на iOS имеет фото библиотеку. Для таких устройств, имеет ли устройство камеру, можно использовать контроллер средства выбора изображения для представления браузера носителей. Что касается представления интерфейса камеры, Вы, должно быть, реализовали объект делегата реагировать на взаимодействие пользователя с интерфейсом просмотра. Можно тогда инстанцировать и сконфигурировать контроллер средства выбора изображения путем указания следующих опций:

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

Перечисление 1  , Представляющее полный экран интерфейса браузера носителей на iPhone или iPod touch

- (BOOL) startMediaBrowserFromViewController: (UIViewController*) controller
               usingDelegate: (id <UIImagePickerControllerDelegate,
                                   UINavigationControllerDelegate>) delegate {
 
    if (([UIImagePickerController isSourceTypeAvailable:
                 UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO)
            || (delegate == nil)
            || (controller == nil))
        return NO;
 
    UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init];
    mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
 
    // Displays saved pictures and movies, if both are available, from the
    // Camera Roll album.
    mediaUI.mediaTypes =
        [UIImagePickerController availableMediaTypesForSourceType:
            UIImagePickerControllerSourceTypeSavedPhotosAlbum];
 
    // Hides the controls for moving & scaling pictures, or for
    // trimming movies. To instead show the controls, use YES.
    mediaUI.allowsEditing = NO;
 
    mediaUI.delegate = delegate;
 
    [controller presentModalViewController: mediaUI animated: YES];
    return YES;
}

На iPad необходимо представить интерфейс браузера с помощью легкой сдобы, как описано в initWithContentViewController: и Представление и Отклонение Легкой сдобы в Ссылке класса UIPopoverController. Если на iPad Вы пытаетесь представить интерфейс браузера, модально (полноэкранный), система повышает исключение.

Перечисление 1 выводит на экран и неподвижные изображения и фильмы в средстве выбора, если оба присутствуют в альбоме Рулона Камеры. Представить средство выбора, выводящее на экран только фильмы, например, вместо этого набор mediaTypes свойство следующим образом:

mediaUI.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];

Используя эту опцию, необходимо сначала гарантировать, что устройство способно к отображению фильмов. Сделайте это путем вызова availableMediaTypesForSourceType: метод класса. Для средства выбора, выводящего на экран только неподвижные изображения, замена kUTTypeMovie идентификатор здесь с kUTTypeImage, или полагайтесь на значение по умолчанию mediaTypes свойство, которое является kUTTypeImage.

startMediaBrowserFromViewController:usingDelegate: метод в качестве примера от Перечисления 1 разработан, чтобы быть вызванным методом действия, таким как это:

- (IBAction) showSavedMediaBrowser {
    [self startMediaBrowserFromViewController: self
                                    usingDelegate: self];
}

Заметьте, как указано в сигнатуре метода в Перечислении 1, что объект делегата должен соответствовать UIImagePickerControllerDelegate и UINavigationControllerDelegateпротоколы.

Реализация делегата к браузеру носителей

Когда подарено стандартный дисплей браузера носителей для контроллера средства выбора изображения, пользователь видит сетку прокрутки миниатюр, представляющих содержание альбома Рулона Камеры. Пользовательские опции состоят в том, чтобы отменить работу или касаться на миниатюре. Если пользователь касается Отмены, Ваша реализация делегата должна просто отклонить средство выбора — как Вы делаете при представлении интерфейса камеры. Действительно, Ваш imagePickerControllerDidCancel: реализация для контроллера средства выбора изображения идентична, представить ли ли камеру или интерфейс браузера носителей. См. Перечисление 2.

Если пользователь касается миниатюры, что происходит, затем зависит от того, представляет ли миниатюра неподвижное изображение или фильм.

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

  Метод делегата перечисления 2 для выбранных носителей

- (void) imagePickerController: (UIImagePickerController *) picker
            didFinishPickingMediaWithInfo: (NSDictionary *) info {
 
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    UIImage *originalImage, *editedImage, *imageToUse;
 
    // Handle a still image picked from a photo album
    if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0)
            == kCFCompareEqualTo) {
 
        editedImage = (UIImage *) [info objectForKey:
                    UIImagePickerControllerEditedImage];
        originalImage = (UIImage *) [info objectForKey:
                    UIImagePickerControllerOriginalImage];
 
        if (editedImage) {
            imageToUse = editedImage;
        } else {
            imageToUse = originalImage;
        }
        // Do something with imageToUse
    }
 
    // Handle a movied picked from a photo album
    if (CFStringCompare ((CFStringRef) mediaType, kUTTypeMovie, 0)
            == kCFCompareEqualTo) {
 
        NSString *moviePath = [[info objectForKey:
                    UIImagePickerControllerMediaURL] path];
 
        // Do something with the picked movie available at moviePath
    }
 
    [[picker parentViewController] dismissModalViewControllerAnimated: YES];
    [picker release];
}

Если редактирование изображение включено, и пользователь успешно принимает недавно полученное изображение, информационный параметр imagePickerController:didFinishPickingMediaWithInfo: метод содержит словарь, включающий отредактированное изображение. Обработайте это изображение как выбранное изображение, как сделано в Перечислении 2. Если Вы хотите сохранить исходное изображение, можно получить его из словаря, также как показано в листинге кода.