1.先看一下camera的一些屬性
當(dāng)然先要導(dǎo)入頭文件#import <MobileCoreServices/UTCoreTypes.h>
- (void)testProperty {
if ([self isCameraAvail]) {
NSLog(@"當(dāng)前相機(jī)可用");
}else {
NSLog(@"當(dāng)前相機(jī)不可用");
}
if ([self cameraSupportMedia:(__bridge NSString *)kUTTypeImage]) {
NSLog(@"支持拍照");
}else {
NSLog(@"不支持拍照");
}
if ([self cameraSupportMedia:(__bridge NSString *)kUTTypeMovie]) {
NSLog(@"支持錄像");
}else {
NSLog(@"不支持錄像");
}
}
//檢查相機(jī)是否可用
- (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];
}
//檢查支持什么媒體類(lèi)型
- (BOOL)cameraSupportMedia:(NSString *)paraMediaType {
NSArray * avaiableMedia = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
for (NSString * item in avaiableMedia) {
if ([item isEqualToString:paraMediaType]) {
return true;
}
}
return false;
}
2.用照相機(jī)進(jìn)行拍照
在實(shí)際項(xiàng)目中的使用時(shí)脸爱,首先我們要檢查相機(jī)的可用性镀脂,再配置UIImagePickerController
UIImagePickerController * controller = [[UIImagePickerController alloc] init];
controller.sourceType = UIImagePickerControllerSourceTypeCamera;//配置媒體類(lèi)型
NSString * requierModieType = (__bridge NSString *)kUTTypeImage;
controller.mediaTypes = [[NSArray alloc] initWithObjects:requierModieType, nil];
controller.allowsEditing = false;
controller.delegate = self;//設(shè)置代理
//配置閃光燈
controller.cameraFlashMode = UIImagePickerControllerCameraFlashModeOn;
//配置攝像頭
//controller.cameraDevice = UIImagePickerControllerCameraDeviceFront;
[self.navigationController presentViewController:controller animated:YES completion:nil];
再需要實(shí)現(xiàn)UIImagePickerControllerDelegate的代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
//info拿到我們拍照的內(nèi)容
NSDictionary * dict = [info objectForKey:UIImagePickerControllerMediaMetadata];
NSLog(@"%@", dict);//從info可以取得很多信息
NSString * mediaType = [info objectForKey:UIImagePickerControllerMediaType];//拿到當(dāng)前拍攝的媒體類(lèi)型
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.從圖片庫(kù)選照片
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];