1。导入库,实现协议
#import <MobileCoreServices/MobileCoreServices.h>
<UIImagePickerControllerDelegate, UINavigationControllerDelegate>
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) doesCameraSupportTakingPhotos{
//KUTTypeImage : 静态图片
return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera];
}
//是否可用摄像头
- (BOOL) isCameraAvailable{
return[UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera];
}
//delegate:完成选择,注意这里的视频数据或是相片数据并未被保存(到机子的相册中)
- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSLog(@"Picker returned successfully.");
NSLog(@"infoOfPickedMedia:%@", info); //info:包含了挑选的媒体信息
NSString *mediaType = info[UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeMovie]){ //挑选的是视频
NSURL *urlOfVideo = info[UIImagePickerControllerMediaURL];
NSLog(@"Video URL = %@", urlOfVideo);
}
else if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]){ //挑选的是相片
NSDictionary *metadata = info[UIImagePickerControllerMediaMetadata]; //metadata只针对images
UIImage *theImage = info[UIImagePickerControllerOriginalImage];
NSLog(@"Image Metadata = %@", metadata);
NSLog(@"Image = %@", theImage);
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
//delegate 取消选择
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
NSLog(@"Picker was cancelled");
[picker dismissViewControllerAnimated:YES completion:nil];
}
- (void)actionDisplayPickerController {
if ([self isCameraAvailable] && [self doesCameraSupportTakingPhotos]){
UIImagePickerController *controller = [[UIImagePickerController alloc] init];
controller.sourceType = UIImagePickerControllerSourceTypeCamera; //从照相机获取资源,如拍照,摄像等
//mediaType:KUTTypeImage / KUTTypeMovie 这里决定了出现的模式窗口imagePickerController是进行摄像还是进行照相
NSString *requiredMediaType = (__bridge NSString *)kUTTypeImage;
controller.mediaTypes = [[NSArray alloc] initWithObjects:requiredMediaType, nil];
controller.allowsEditing = YES;
controller.delegate = self;
[self presentViewController:controller animated:YES completion:nil];
} else {
NSLog(@"Camera is not available.");
}
}
postscript:
didFinishPickingMediaWithInfo中的字典集info包含了所获取资源的各项属性(以下是可访问的key)
对于images(KUTTypeImage):默认获取到的相片不会被保存
UIImagePickerControllerMediaMetadata:元数据(NSDictionary)
UIImagePickerControllerOriginalImage:获取到的未编辑的原始图
UIImagePickerControllerCropRect:被裁剪的尺寸(若可修改的话 allowsEditing = YES)
UIImagePickerControllerEditedImage:编辑后的图
对于videos(KUTTypeMovie):
UIImagePickerControllerMediaURL:获取到video的URL