美文网首页
iOS之Camera的使用

iOS之Camera的使用

作者: 心底碎片 | 来源:发表于2017-10-31 17:34 被阅读38次

    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];
    

    再需要实现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];
    

    相关文章

      网友评论

          本文标题:iOS之Camera的使用

          本文链接:https://www.haomeiwen.com/subject/jvxnjttx.html