Читаем iOS. Приемы программирования полностью

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

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже