在iOS7下扫描二维码

作者: 康富贵 | 来源:发表于2015-04-12 11:53 被阅读1028次
    NSError *error;
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
    
    if (error)
    {
        NSLog(@"%@", [error domain]);
        return;
    }
    
    self.captureSession = [[AVCaptureSession alloc] init];
    [self.captureSession addInput:input];
    
    AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init];
    [self.captureSession addOutput:captureMetadataOutput];
        
    [captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    [captureMetadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
    
    AVCaptureVideoPreviewLayer *layer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];
    [layer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
    [layer setFrame:self.view.layer.bounds];
    [self.view.layer addSublayer:layer];
    self.videoPreviewLayer = layer;
    
    [self.captureSession startRunning];
    

    一切顺利,扫描的效率很高。

    可出现了一个问题,我只想在屏幕中的小框内扫描,而不是整个屏幕都可以扫描,类似于微信的效果。

    查看文档后发现AVCaptureMetadataOutput类有一个属性rectOfInterest。

    rectOfInterest的默认值是CGRectMake(0,0,1,1)

    0和1是相对于屏幕的比例,而不是具体的数值。

    而且x和y,width和height的位置都互换了。

    添加代码:

    CGRect lensRect = self.lensView.frame;
    
    CGFloat screenW = ScreenSize.width;
    CGFloat screenH = ScreenSize.height;
    CGRect rectInterest = CGRectMake(CGRectGetMinY(lensRect) / screenH,
                                     ((screenW-CGRectGetWidth(lensRect)))/2/screenW,
                                     CGRectGetHeight(lensRect) / screenH,
                                     CGRectGetWidth(lensRect) / screenW);
    
    [captureMetadataOutput setRectOfInterest:rectInterest];
    

    大功告成!

    相关文章

      网友评论

      • LamSpeech:你好 假如预览区域不等于屏幕大小rectOfInterest应该怎样计算呢 是按照预览区域的宽高进行计算还是屏幕的宽高

      本文标题:在iOS7下扫描二维码

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