Вход/Регистрация
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];

<
  • Читать дальше
  • 1
  • ...
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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