|
Июл
31
|
В этом простом уроке мы освоим доступ к фотобиблиотеке iPhone вместе с камерой. Рассматривать эти функции мы будем на примере SDK 3.0 и выше, поскольку с версии 3.0 методы выбора фотоснимков перешли в разряд устаревших (deprecated).
Мы создадим приложение для выбора фотографии из библиотеки или фотокамеры с последующим выводом на экран. Вот как это будет выглядеть на практике:

Что ж, приступим.
1. Создайте новое приложение на основе представления
Своему я присвоил имя “photoApp” (и в уроке буду пользоваться именно им).
2. Создайте “IBOutlets” и “IBAction”
Открыв файл “photoAppViewController.h“, внесите в него следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #import @interface PhotoAppViewController : UIViewController | UIImagePickerControllerDelegate, UINavigationControllerDelegate | { UIImageView * imageView; UIButton * choosePhotoBtn; UIButton * takePhotoBtn; } @property (nonatomic, retain) IBOutlet UIImageView * imageView; @property (nonatomic, retain) IBOutlet UIButton * choosePhotoBtn; @property (nonatomic, retain) IBOutlet UIButton * takePhotoBtn; -(IBAction) getPhoto:(id) sender; @end |
ВАЖНО: В описании интерфейса замените “|” на “< and >“. Я использовал вертикальную полосу, поскольку WordPress заменял ее HTML-кодом.
Обратите внимание на реализацию “UIImagePickerControlDelegate” и “UINavigationControllerDelegate“. Оба метода необходимы для корректного взаимодействия с опцией выбора изображений. Все остальное сложности, в принципе, не представляет (особенно для тех, кто регулярно следит за нашими уроками). Мы настроили переменные outlet на используемые кнопки — чтобы определять, какая из них была нажата. При щелчке пользователя на любой из кнопок будет вызываться “IBAction“. Данный метод (getPhoto) будет отображать “ImagePicker“.
3. Создаем интерфейс
В редакторе Interface Builder откройте “photoAppViewController.xib” и выполните перечисленные ниже шаги:
1) Перетащите объект “UIImageView” на основное представление.
2) В окне инспектора атрибутов установите параметр “Mode” для “UIImageView” на “Aspect Fit“.
3) Перетащите в представление “UIButton” и присвойте объекту имя “Choose Photo” (Выбрать фото).
4) Добавьте в представление еще одну кнопку “UIButton” с именем “Take Photo” (Получить фото).
В результате интерфейс должен выглядеть примерно так:

4. Связываем “IBoutlets” и “IBAction”
“choosePhotoBtn” свяжите с кнопкой “UIButton” под именем “Choose Photo“.
“takePhotoBtn” свяжите с кнопкой “UIButton” под именем “Take Photo“.
“imageView” свяжите с “UIImageView“.
Обратный вызов “Touch Up Inside” свяжите с каждой из кнопок метода “getPhoto“.
При щелчке на объекте “File’s Owner” окно инспектора связей должно выглядеть так:

Закройте редактор Interface Builder.
5. Внедряем метод “getPhoto”
Открыв “PhotoAppViewController.m“, добавьте следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @synthesize imageView,choosePhotoBtn, takePhotoBtn; -(IBAction) getPhoto:(id) sender { UIImagePickerController * picker = [[UIImagePickerController alloc] init]; picker.delegate = self; if((UIButton *) sender == choosePhotoBtn) { picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; } else { picker.sourceType = UIImagePickerControllerSourceTypeCamera; } [self presentModalViewController:picker animated:YES]; } |
Убедитесь, что свойства представления синтезированы. Подробнее происходящее в этом методе выглядит так.
Сначала создаем новый объект “UIImagePickerController“. Этот контроллер представления можно отображать любым стандартным способом (подключать к стеку навигационного представления, загружать в табличном представлении, представлять как “modalviewcontroller“). Следующим шагом настраиваем делегат инструмента выбора на “viewController“. Соответственно, при выборе пользователем фотографии инструмент будет обращаться к методу внутри данного класса.
Сейчас нужно определить, какая была нажата кнопка. Поскольку с методом связаны обе кнопки, увидеть это можно с помощью “= =“. Стоит отметить, что здесь Apple сработала просто здорово. Разница между отображением камеры и фотобиблиотеки определяется настройкой одного единственного свойства в инструменте выбора. Впрочем, думаю, что глядя на код, вы и сами уже во всем разобрались.
Осталось вызвать с помощью инструмента выбора “presentModalViewController“. Тем самым мы превращаем инструмент в анимированное представление, занимающее экран сверху донизу. В зависимости от нажатой кнопки появится одно из показанных ниже представлений.


6. Отображение выбранного изображения
После выбора фотографии “ImagePicker” выполняет обратный вызов метода нашего класса с названием “didFinishPickingMediaWithInfo“. К файлу “PhotoAppViewController.m” добавьте следующий код:
1 2 3 4 | - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [picker dismissModalViewControllerAnimated:YES]; imageView.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; } |
Первая строка просто скрывает инструмент выбора. Следующая — настраивает для представления изображения свойство “image” на возвращенное при выборе фото. Фактически, инструмент возвращает “NSDictionary“. Это объясняется тем, что другой ключ “UIImagePickerControllerMediaType;” указывает, чем именно является объект — видеофайлом или изображением.
Вот, собственно, и все — мы научились получать фотографии с фотокамеры и из библиотеки iPhone. Удачи в программировании!



Декабрь 13th, 2009 at 21:30
а как сохранить обратно полученную фотографию в альбом?