iOS之Camera的使用

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];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容