Space Invaders Infinity Gene - MUST HAVE! Minigore
Июл 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. Удачи в программировании!

Исходный код скачать можно [здесь]

Текст оригинальной статьи на английском языке [здесь]

Уважаемые читатели, данный материал был переведен и подготовлен к публикации проектом LookApp.ru, при публикации на другом сайте ссылка на LookApp.ru обязательна.

1 звезда2 звезд3 звезд4 звезд5 звезд (Оцените приложение)
Загрузка ... Загрузка ...


One Response to “Уроки iPhone SDK: Получение фотографий из фотобиблиотеки iPhone или с камеры с помощью UIImagePickerController”

  1. 1. Max Says:

    а как сохранить обратно полученную фотографию в альбом?

Оставьте комментарий