Выбор элемента от фото библиотеки
В дополнение к использованию a UIImagePickerController
экземпляр для получения новых изображений и фильмов можно использовать его для представления браузера носителей, позволяющего пользователю выбрать элемент из их сохраненных фотоальбомов. Шаги Вы взятие подобны тем для получения носителей, как описано в Снимании и Фильмах. Различия:
Вместо того, чтобы использовать камеру в качестве источника носителей, Вы используете альбом Рулона Камеры или Сохраненный фото альбом или всю фото библиотеку.
Вместо того, чтобы получить новые носители и (обычно) сохранить его к альбому, Вы позволяете пользователю выбрать ранее сохраненные носители. Можно тогда использовать выбранные носители в приложении, возможно выводя на экран его полный экран.
Эта глава объясняет, как использовать контроллер средства выбора изображения и делегата к просмотру и выбору сохраненных картинок и фильмов. Если стандартные носители, просматривающие UI, не удовлетворяют Вашим потребностям, можно создать полностью настраиваемое решение с UIKit и платформой Библиотеки Активов. Посмотрите Ссылку Платформы Библиотеки Активов.
Создание и конфигурирование браузера носителей
Большинство устройств на iOS имеет фото библиотеку. Для таких устройств, имеет ли устройство камеру, можно использовать контроллер средства выбора изображения для представления браузера носителей. Что касается представления интерфейса камеры, Вы, должно быть, реализовали объект делегата реагировать на взаимодействие пользователя с интерфейсом просмотра. Можно тогда инстанцировать и сконфигурировать контроллер средства выбора изображения путем указания следующих опций:
Исходный тип Для конфигурирования средства выбора для просмотра сохраненных носителей в противоположность получению нового изображения или фильма установите
sourceType
свойство к одному из сохраненных фото источников:Использовать
UIImagePickerControllerSourceTypePhotoLibrary
представить браузер, обеспечивающий доступ ко всем фотоальбомам на устройстве, включая альбом Рулона Камеры на устройствах, имеющих камеру.Использовать
UIImagePickerControllerSourceTypeSavedPhotosAlbum
представить браузер, ограничивающий доступ к альбому Рулона Камеры на устройствах, имеющих камеру, или к Сохраненному фото альбому на не делающих устройствах.
Типы среды, Чтобы указать, устанавливают ли дисплеи контроллера средства выбора изображения сохраненные фильмы, неподвижные изображения, или оба,
mediaTypes
свойство к массиву, содержащему идентификаторы для желаемых типов. Допустимые значения для элементов массиваkUTTypeImage
иkUTTypeMovie
.Однако прежде, чем установить это свойство, проверьте, который типы среды доступны путем вызова
availableMediaTypesForSourceType:
метод класса. Если Вы устанавливаетеmediaTypes
свойство к пустому массиву, или к массиву, в котором ни один из типов среды не доступен для текущего источника, система, выдает исключение.Редактирование средств управления, Чтобы указать, предлагает ли средство выбора носителей контроль за работой пользователей для перемещения и масштабирования выбранного сохраненного образа, или для обрезки выбранного сохраненного фильма, установило
allowsEditing
свойство кYES
(для обеспечения средств управления редактированием) или кNO
.При использовании встроенных средств управления редактированием контроллер средства выбора изображения осуществляет определенные опции. Для неподвижных изображений средство выбора осуществляет квадратную обрезку, а также максимальную пиксельную размерность. Для фильмов средство выбора осуществляет максимальную длину фильма и разрешение. Если Вы хотите позволить пользователю отредактировать полноразмерные носители или указать пользовательскую обрезку, необходимо обеспечить собственное редактирование UI.
Объект делегата Наконец, присвойте свой объект делегата контроллеру средства выбора изображения
delegate
свойство.
Перечисление 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. Если Вы хотите сохранить исходное изображение, можно получить его из словаря, также как показано в листинге кода.