1。导入的库和使用的类
#import <MobileCoreServices/MobileCoreServices.h>
#import<AssetsLibrary/AssetsLibrary.h>
UIImagePickerControllerClass2。资源类型可用性:
isSourceTypeAvailable
BOOL isCameraOK = [UIImagePickerController
isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera];//摄像头
BOOL isPhotoLibraryOK = [UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary];//图片库(包括了相册)
BOOL isPhotoAlbumOK = [UIImagePickerController
isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum];//相册
3。硬件设备可用性:
isCameraDeviceAvailable(摄像头)/ isFlashAvailableForCameraDevice(摄像头闪光功能)
BOOL isCameraFrontOk = [UIImagePickerController
isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];//前置摄像头
BOOL isCameraRearOk = [UIImagePickerController
isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];//后置摄像头
BOOL isCameraFlashFrontOk = [UIImagePickerController
isFlashAvailableForCameraDevice: UIImagePickerControllerCameraDeviceFront];//前置摄像头闪光
BOOL isCameraFlashRearOk = [UIImagePickerController
isFlashAvailableForCameraDevice: UIImagePickerControllerCameraDeviceRear];//后置摄像头闪光
e.g.
- (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{
//KUTTypeMovie:录像
return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypeCamera];
}
//摄像头是否支持拍照
- (BOOL) doesCameraSupportTakingPhotos{
//KUTTypeImage:静态图片
return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera];
}
postscript:
__bridges(类型转换的关键字): type CFStringRef <=> type NSString
NSString *imageNSString = (__bridge NSString *)kUTTypeImage //KUTTypeImage : CFStringRef
//因为ARC只支持Objective-C对象,不支持Core Foundation对象,二者在进行类型转换要用到__bridge
NSString *aNSString = @"test";
CFStringRef aCFString = CFStringCreateWithCString(NULL,
"test", kCFStringEncodingASCII);
CFStringRef newCFString = (__bridge CFStringRef)aNSString;
NSString *newNSString = (__bridge NSString *)aCFString;