美文网首页
iOS开发——相机功能及全屏的实现的

iOS开发——相机功能及全屏的实现的

作者: 野孩子阿西 | 来源:发表于2017-07-10 11:35 被阅读0次

    最近也是因为项目需要开发一个很奇葩的功能,接触了相机功能,也接触了这个相机功能。

    首先,iOS相机功能分两种实现方式,一种是系统的UIImagePickerController,一种是自定义的AVCaptureSession,我自己刚开始的时候一直以为UIImagePickerController是自己写的类。。。

    另外,使用相机前,要获取相机的使用权限,这个网上好的大把,就不写了。

    一、UIImagePickerController

    1.跳转Controller实现两个协议UIImagePickerControllerDelegate和UINavigationControllerDelegate

    2.实例化,实现协议跳转

    UIImagePickerController*pick = [[UIImagePickerControlleralloc]init];

    pick.delegate=self;

    pick.sourceType=UIImagePickerControllerSourceTypeCamera;

    //想要相机全屏,用这个showsCameraControls设置成NO后相机的UI会被隐藏了,但是底部的工具栏会留下一个个黑块,解决办法是一个取巧的办法,CGAffineTransformMakeScale

    pick.showsCameraControls=NO;

    //但是这样就是放大的效果,有好有坏吧,不行就只能用自定义的了

    pick.cameraViewTransform=CGAffineTransformMakeScale(2,2);

    [selfpresentViewController:pickanimated:YEScompletion:^{

    }];

    还有一种相机的实现方式

    二、AVCaptureSession

    1,导入AVfounation包

    2.实例化

    //1.创建媒体管理会话

    AVCaptureSession*session = [[AVCaptureSessionalloc]init];

    //判断分辨率是否支持1280*720,支持就设置为1280*720

    if( [sessioncanSetSessionPreset:AVCaptureSessionPreset1280x720] ) {

    session.sessionPreset=AVCaptureSessionPreset1280x720;

    }

    //2.获取后置摄像头设备对象

    AVCaptureDevice*device =nil;

    NSArray*cameras = [AVCaptureDevicedevicesWithMediaType:AVMediaTypeVideo];

    for(AVCaptureDevice*cameraincameras) {

    if(camera.position==AVCaptureDevicePositionBack) {//取得后置摄像头

    device = camera;

    }

    }

    if(!device) {

    NSLog(@"取得后置摄像头错误");

    return;

    }

    //3.创建输入数据对象

    NSError*error =nil;

    AVCaptureDeviceInput*captureInput = [[AVCaptureDeviceInputalloc]initWithDevice:device

    error:&error];

    if(error) {

    NSLog(@"创建输入数据对象错误");

    return;

    }

    //4.创建输出数据对象

    AVCaptureStillImageOutput*imageOutput = [[AVCaptureStillImageOutputalloc]init];

    NSDictionary*setting =@{AVVideoCodecKey:AVVideoCodecJPEG};

    [imageOutputsetOutputSettings:setting];

    //5.添加输入数据对象和输出对象到会话中

    if([sessioncanAddInput:captureInput]) {

    [sessionaddInput:captureInput];

    }

    if([sessioncanAddOutput:imageOutput]) {

    [sessionaddOutput:imageOutput];

    }

    //6.创建视频预览图层

    AVCaptureVideoPreviewLayer*videoLayer =

    [[AVCaptureVideoPreviewLayeralloc]initWithSession:session];

    self.view.layer.masksToBounds=YES;

    videoLayer.frame=self.view.bounds;

    videoLayer.videoGravity=AVLayerVideoGravityResizeAspectFill;

    [self.view.layeraddSublayer:videoLayer];

    //这里需要设置相机开始捕捉画面

    [sessionstartRunning];//开始捕捉

    相关文章

      网友评论

          本文标题:iOS开发——相机功能及全屏的实现的

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