Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

@implementation ViewController

<# Остаток вашего кода находится здесь #>

Делегат экземпляра UIImagePickerController должен соответствовать протоколам UINavigationControllerDelegate и UIImagePickerControllerDelegate. Если вы забудете включить их в. h-файл вашего объекта-делегата, то будете получать предупреждения от компилятора при присвоении значения делегатному свойству контроллера для выбора изображений. Не забывайте, что вы можете присваивать делегату объект экземпляра UIImagePickerController и в том случае, если данный объект не соответствует явно протоколам UIImagePickerControllerDelegate и UINavigationControllerDelegate, но реализует методы, необходимые в этих протоколах. Тем не менее я советую «подсказывать» компилятору, что фактически объект-делегат соответствует вышеупомянутым протоколам, — так вы избавитесь от лишних предупреждений компилятора.

В реализации контроллера вида попытаемся отобразить контроллер для выбора изображения в виде модального контроллера вида следующим образом:

— (void)viewDidAppear:(BOOL)animated{

[super viewDidAppear: animated];

static BOOL beenHereBefore = NO;

if (beenHereBefore){

/* Отображаем элемент для выбора даты только после того, как вызывается

метод viewDidAppear:, что происходит при каждом отображении вида

нашего контроллера вида */

return;

} else {

beenHereBefore = YES;

}

if ([self isCameraAvailable] &&

[self doesCameraSupportTakingPhotos]){

UIImagePickerController *controller =

[[UIImagePickerController alloc] init];

controller.sourceType = UIImagePickerControllerSourceTypeCamera;

NSString *requiredMediaType = (__bridge NSString *)kUTTypeImage;

controller.mediaTypes = [[NSArray alloc]

initWithObjects: requiredMediaType, nil];

controller.allowsEditing = YES;

controller.delegate = self;

[self.navigationController presentModalViewController: controller

animated: YES];

} else {

NSLog(@"Camera is not available.");

}

}

В этом примере пользуемся методами isCameraAvailable и doesCameraSupportTakingPhotos. Эти методы реализованы и подробно рассмотрены в разделе 13.1.

В данном примере мы предоставим пользователю возможность делать снимки, пользуясь контроллером для выбора изображений. Вы, должно быть, заметили, что для делегатного свойства инструмента выбора изображений мы задаем значение self, которое относится к контроллеру вида. При этом необходимо убедиться, что мы реализовали методы, определенные в протоколе UIImagePickerControllerDelegate:

— (void) imagePickerController:(UIImagePickerController *)picker

didFinishPickingMediaWithInfo:(NSDictionary *)info{

NSLog(@"Picker returned successfully.");

NSLog(@"%@", info);

NSString *mediaType = [info objectForKey:

UIImagePickerControllerMediaType];

if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeMovie]){

NSURL *urlOfVideo =

[info objectForKey: UIImagePickerControllerMediaURL];

NSLog(@"Video URL = %@", urlOfVideo);

}

else if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]){

/* Получим метаданные. Это касается

только изображений, но не видеороликов. */

NSDictionary *metadata =

[info objectForKey:

UIImagePickerControllerMediaMetadata];

UIImage *theImage =

[info objectForKey:

UIImagePickerControllerOriginalImage];

NSLog(@"Image Metadata = %@", metadata);

NSLog(@"Image = %@", theImage);

}

[picker dismissModalViewControllerAnimated: YES];

}

— (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

NSLog(@"Picker was cancelled");

[picker dismissModalViewControllerAnimated: YES];

}

Обсуждение

При работе с делегатом инструмента для выбора изображений необходимо учитывать пару немаловажных аспектов. Два делегатных метода вызываются у объекта-делегата контроллера для выбора изображений. Метод imagePickerController: didFinishPickingMediaWithInfo: вызывается, когда пользователь завершает работу с инструментом выбора изображений (то есть делает снимок и наконец нажимает кнопку). В свою очередь, метод imagePickerControllerDidCancel: вызывается в случае, когда операция с инструментом выбора изображений отменяется.

Кроме того, метод делегата imagePickerController: didFinishPickingMediaWithInfo: содержит данные о том предмете, который был отснят пользователем, независимо от того, изображение это или видеоданные. Параметр didFinishPickingMediaWithInfo — это словарь значений, сообщающий, что именно было отснято в инструменте выбора изображений плюс метаданные отснятого контента и другую полезную информацию. Работу в этом методе следует начать со считывания значения ключа UIImagePickerControllerMediaType из этого словаря. Объект для данного ключа представляет собой экземпляр NSString и может принимать одно из следующих значений:

Поделиться:
Популярные книги

Последний Паладин. Том 7

Саваровский Роман
7. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 7

Солнечный флот

Вайс Александр
4. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Солнечный флот

Антимаг его величества. Том IV

Петров Максим Николаевич
4. Модификант
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Антимаг его величества. Том IV

Я до сих пор не князь. Книга XVI

Дрейк Сириус
16. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я до сих пор не князь. Книга XVI

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Двойник короля 18

Скабер Артемий
18. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 18

Газлайтер. Том 4

Володин Григорий
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 4

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Камень Книга седьмая

Мастер 5

Чащин Валерий
5. Мастер
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Мастер 5

Зодчий. Книга III

Погуляй Юрий Александрович
3. Зодчий Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Зодчий. Книга III

Заход. Солнцев. Книга XII

Скабер Артемий
12. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Заход. Солнцев. Книга XII