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