iOS二维码扫描

作者: AKyS佐毅 | 来源:发表于2016-01-14 01:14 被阅读993次

先上图(详细的都在keynote画出来了>_<


二维码扫描工作原理.jpg

图永远都是最清晰明了的。下边说说注意事项:

     //如果没获得权限
    NSString *mediaType = AVMediaTypeVideo;
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
    if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
    [AlertView alertWithTitle:nil message:@"亲,请先到系统“隐私”中打开相机权限哦!" buttonTitle:@"知道啦!" confrimBlock:^{
        [self.navigationController popViewControllerAnimated:YES];
    }];
    
    return;
}
   _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

   _input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:nil];

   _output = [[AVCaptureMetadataOutput alloc]init];
   [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

    _session = [[AVCaptureSession alloc]init];
    [_session setSessionPreset:AVCaptureSessionPresetHigh];
    if ([_session canAddInput:self.input])  {
         [_session addInput:self.input];
    }

    if ([_session canAddOutput:self.output])  {
           [_session addOutput:self.output];
     }
      // 条码类型 AVMetadataObjectTypeQRCode
    _output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];

    // Preview
    _preview =[AVCaptureVideoPreviewLayer layerWithSession:_session];
    _preview.videoGravity =AVLayerVideoGravityResize;
    _preview.frame =self.view.layer.bounds;
    [self.view.layer insertSublayer:_preview atIndex:0];

    [_session startRunning];

  //设置扫描输出口的视图捕捉范围
    [_output setRectOfInterest:CGRectMake(cropRect.origin.y / screenHeight,
                                      cropRect.origin.x / screenWidth,
                                      cropRect.size.height / screenHeight,
                                      cropRect.size.width / screenWidth)];
        
 最后实现代理方法:
   #pragma mark AVCaptureMetadataOutputObjectsDelegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
        NSString *stringValue;
       if ([metadataObjects count] >0){
           //停止扫描
            [_session stopRunning];
            AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects safeObjectAtIndex:0];
            stringValue = metadataObject.stringValue;
       }else{
            //扫码失败
            [self.session startRunning];
            return; 
      }
}

相关文章

  • iOS开发:二维码扫描与生成(扫描篇)

    iOS开发中经常要用到生成二维码与扫描二维码的功能,iOS7开始,系统支持原生的扫描二维码,iOS7 扫描二维码可...

  • ZBar

    iOS中使用ZBar扫描二维码自定义扫描界面

  • iOS开发之二维码扫描

    iOS开发之二维码扫描 在 iOS7 以前,在IOS中实现二维码和条形码扫描,我们所知的有,两大开源组件 ZBar...

  • IOS中生成二维码、扫描二维码

    title : IOS中生成二维码、扫描二维码category : UI IOS中生成二维码、保存二维码 标签(空...

  • iOS二维码扫描

    前面我们已经学会了iOS二维码生成相关的知识,这篇文章主要是讲解一下iOS二维码扫描相关的知识. 二维码扫描步骤 ...

  • 二维码扫描和创建(上)

    扫描二维码(包括读取和解码) 扫描二维码OC的开源库有ZBar和ZXing。iOS7以后iOS拥有原生的扫码功能。...

  • 2019-06-03

    iOS二维码扫描//设置条码类型 ****.metadataObjectTypes =@[... - 简书

  • 详细易懂的二维码的扫描、识别与生成

    ios7之前我们实现二维码扫描是借助第三方(ZBar,ZXing等)来实现的,在ios7之后系统自己提供二维码扫描...

  • 二维码扫描

    来源 二维码扫描 ios7之前我们实现二维码扫描一般是借助第三方来实现,但是在ios7之后系统自己提供二维码扫面的...

  • iOS 二维码扫描

    iOS开发中 二维码扫描 前言 在移动开发中二维码扫描这种事情越来越常见了,在iOS中我选择了用ZBar这个第三方...

网友评论

    本文标题:iOS二维码扫描

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