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

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

Жанры

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 и может принимать одно из следующих значений:

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

Тройняшки не по плану. Идеальный генофонд

Лесневская Вероника
Роковые подмены
Любовные романы:
современные любовные романы
6.80
рейтинг книги
Тройняшки не по плану. Идеальный генофонд

Барон играет по своим правилам

Ренгач Евгений
5. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Барон играет по своим правилам

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Секретарь лорда Демона

Лунёва Мария
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Секретарь лорда Демона

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

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

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

Я тебя не отпущу

Коваленко Марья Сергеевна
4. Оголенные чувства
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Я тебя не отпущу

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Девочка из прошлого

Тоцка Тала
3. Айдаровы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка из прошлого

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

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

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

Хозяйка дома на холме

Скор Элен
1. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка дома на холме

Жена проклятого некроманта

Рахманова Диана
Фантастика:
фэнтези
6.60
рейтинг книги
Жена проклятого некроманта

Имя нам Легион. Том 9

Дорничев Дмитрий
9. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 9