— (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 имеются две камеры — спереди и сзади.