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

на главную

Жанры

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

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

Шрифт:

[self.window makeKeyAndVisible];

return YES;

}

Обсуждение

Прежде чем попытаться отобразить для пользователя экземпляр UIImagePickerController, позволяющий делать фотоснимки или записывать видео, нужно проверить, поддерживается ли на устройстве этот интерфейс. Метод класса isSourceTypeAvailable: позволяет определить три источника данных:

• камеру — для этого данному методу сообщается значение UIImagePickerControllerSourceTypeCamera;

• библиотеку фотографий — для этого данному методу

сообщается значение UIImagePickerControllerSourceTypePhotoLibrary. В результате включается обзор корневого каталога в директории Photos на устройстве;

• каталог с фотографиями, отснятыми с камеры данного устройства (Camera Roll), — в таком случае метод получает значение UIImagePickerControllerSourceTypeSavedPhotosAlbum.

Если вы собираетесь проверить доступность любой из этих функций на устройстве с iOS, нужно передать описанные значения методу класса isSourceTypeAvailable:, относящемуся к классу UIImagePickerController, и лишь потом попробовать отобразить для пользователя соответствующий интерфейс.

Теперь можно воспользоваться методами класса isSourceTypeAvailable: и availableMediaTypesForSourceType:, относящимися к классу UIImagePickerController, чтобы для начала определить, доступен ли источник медийной информации (например, камера, библиотека фотографий и т. д.). Если источник имеется, определим, какие типы медиаинформации (например, изображения или видео) в нем предоставляются:

— (BOOL) cameraSupportsMedia:(NSString *)paramMediaType

sourceType:(UIImagePickerControllerSourceType)paramSourceType{

__block BOOL result = NO;

if ([paramMediaType length] == 0){

NSLog(@"Media type is empty.");

return NO;

}

NSArray *availableMediaTypes =

[UIImagePickerController

availableMediaTypesForSourceType: paramSourceType];

[availableMediaTypes enumerateObjectsUsingBlock:

^(id obj, NSUInteger idx, BOOL *stop) {

NSString *mediaType = (NSString *)obj;

if ([mediaType isEqualToString: paramMediaType]){

result = YES;

*stop= YES;

}

}];

return result;

}

— (BOOL) doesCameraSupportShootingVideos{

return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeMovie

sourceType: UIImagePickerControllerSourceTypeCamera];

}

— (BOOL) doesCameraSupportTakingPhotos{

return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeImage

sourceType: UIImagePickerControllerSourceTypeCamera];

}

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

if ([self doesCameraSupportTakingPhotos]){

NSLog(@"The camera supports taking photos.");

} else {

NSLog(@"The camera does not support taking photos");

}

if ([self doesCameraSupportShootingVideos]){

NSLog(@"The camera supports shooting videos.");

} else {

NSLog(@"The camera does not support shooting videos.");

}

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Мы

приводим типы значений kUTTypeMovie и kUTTypeImage к NSString с помощью __bridge (как было рассказано в разделе 1.18). Это объясняется тем, что два вышеупомянутых значения относятся к типу CFStringRef и нам нужно получить их представление в виде NSString. Чтобы упростить работу статического анализатора и компилятора и не получать от компилятора лишних сообщений, лучше выполнить такое приведение типов.

На некоторых устройствах с iOS может быть установлена не одна камера. Например, их может быть две — передняя и задняя. Чтобы определить, доступны ли эти камеры, воспользуйтесь методом класса isCameraDeviceAvailable:, относящимся к классу UIImagePickerController:

— (BOOL) isFrontCameraAvailable{

return [UIImagePickerController

isCameraDeviceAvailable: UIImagePickerControllerCameraDeviceFront];

}

— (BOOL) isRearCameraAvailable{

return [UIImagePickerController

isCameraDeviceAvailable: UIImagePickerControllerCameraDeviceRear];

}

Если вызвать эти методы на не самом новом iPhone, где отсутствует задняя камера, то можно заметить, что метод isFrontCameraAvailable возвращает NO, а метод isRearCameraAvailable — YES. При запуске данного кода на iPhone, оснащенном как передней, так и задней камерами, оба метода вернут YES, поскольку на iPhone 4 имеются две камеры — спереди и сзади.

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

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Столичный доктор. Том III

Вязовский Алексей
3. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Столичный доктор. Том III

Король Руси

Ланцов Михаил Алексеевич
2. Иван Московский
Фантастика:
альтернативная история
6.25
рейтинг книги
Король Руси

Измена. Жизнь заново

Верди Алиса
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Жизнь заново

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

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

Эйгор. В потёмках

Кронос Александр
1. Эйгор
Фантастика:
боевая фантастика
7.00
рейтинг книги
Эйгор. В потёмках

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Дракон

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

На изломе чувств

Юнина Наталья
Любовные романы:
современные любовные романы
6.83
рейтинг книги
На изломе чувств

Боярышня Дуняша

Меллер Юлия Викторовна
1. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Дуняша

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

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

Я еще не князь. Книга XIV

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

Пограничная река. (Тетралогия)

Каменистый Артем
Пограничная река
Фантастика:
фэнтези
боевая фантастика
9.13
рейтинг книги
Пограничная река. (Тетралогия)

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца