1.先看一下camera的一些屬性
當然先要導入頭文件#import <MobileCoreServices/UTCoreTypes.h>
- (void)testProperty {
if ([self isCameraAvail]) {
NSLog(@"當前相機可用");
}else {
NSLog(@"當前相機不可用");
}
if ([self cameraSupportMedia:(__bridge NSString *)kUTTypeImage]) {
NSLog(@"支持拍照");
}else {
NSLog(@"不支持拍照");
}
if ([self cameraSupportMedia:(__bridge NSString *)kUTTypeMovie]) {
NSLog(@"支持錄像");
}else {
NSLog(@"不支持錄像");
}
}
//檢查相機是否可用
- (BOOL)isCameraAvail {
return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
}
//檢查前置攝像頭閃光燈是否可用
- (BOOL)isCameraFrontFlashAvail {
return [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceFront];
}
//檢查后置攝像頭閃光燈是否可用
- (BOOL)isCameraRearFlashAvail {
return [UIImagePickerController isFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear];
}
//檢查前置攝像頭是否可用
- (BOOL)isFrontCameraAvail {
return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
}
//檢查后置攝像頭是否可用
- (BOOL)isRearCameraAvail {
return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
}
//檢查支持什么媒體類型
- (BOOL)cameraSupportMedia:(NSString *)paraMediaType {
NSArray * avaiableMedia = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
for (NSString * item in avaiableMedia) {
if ([item isEqualToString:paraMediaType]) {
return true;
}
}
return false;
}
2.用照相機進行拍照
在實際項目中的使用時,首先我們要檢查相機的可用性,再配置UIImagePickerController
UIImagePickerController * controller = [[UIImagePickerController alloc] init];
controller.sourceType = UIImagePickerControllerSourceTypeCamera;//配置媒體類型
NSString * requierModieType = (__bridge NSString *)kUTTypeImage;
controller.mediaTypes = [[NSArray alloc] initWithObjects:requierModieType, nil];
controller.allowsEditing = false;
controller.delegate = self;//設置代理
//配置閃光燈
controller.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;
//配置攝像頭
//controller.cameraDevice = UIImagePickerControllerCameraDeviceFront;
[self.navigationController presentViewController:controller animated:YES completion:nil];
再需要實現(xiàn)UIImagePickerControllerDelegate的代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
//info拿到我們拍照的內容
NSDictionary * dict = [info objectForKey:UIImagePickerControllerMediaMetadata];
NSLog(@"%@", dict);//從info可以取得很多信息
NSString * mediaType = [info objectForKey:UIImagePickerControllerMediaType];//拿到當前拍攝的媒體類型
if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]) {
UIImage * image = [info objectForKey:UIImagePickerControllerOriginalImage];//拿到拍攝的照片
self.imageView.image = image;
self.imageView.contentMode = UIViewContentModeScaleToFill;
//照片的保存
SEL saveImage = @selector(ImageWasSavaSuccessFully:didFinishSavingWithError:contextInfo:);
UIImageWriteToSavedPhotosAlbum(image, self, saveImage, nil);
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
- (void)ImageWasSavaSuccessFully:(UIImage *)paraimage
didFinishSavingWithError:(NSError *)paraError
contextInfo:(void *)paraInfo {
if (paraError == nil) {
NSLog(@"圖片保存成功");
}else{
NSLog(@"圖片保存失?。?@", paraError);
}
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:nil];
}
3.從圖片庫選照片
UIImagePickerController * controller = [[UIImagePickerController alloc] init];
controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
NSString * requierModieType = (__bridge NSString *)kUTTypeImage;
controller.mediaTypes = [[NSArray alloc] initWithObjects:requierModieType, nil];
controller.delegate = self;
[self.navigationController presentViewController:controller animated:YES completion:nil];