QR码ios 7 AVMetadataObject

时间:2013-10-10 10:30:01

标签: ios qr-code avmetadataitem

我在检测qr代码的位置时遇到问题。

我需要围绕它绘制边框。

我使用AVMetadataObject bezierpath,但它不起作用。

请帮帮我。

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputMetadataObjects:(NSArray *)metadataObjects
       fromConnection:(AVCaptureConnection *)connection
{
    for (AVMetadataObject *metadata in metadataObjects)
    {
            AnimationView *cv = [[AnimationView alloc]initWithFrame:self.livevideo.bounds]; //creat an instance of your custom view
        [cv setBackgroundColor:[UIColor clearColor]];



        NSLog(@"%f",metadata.accessibilityPath.accessibilityActivationPoint.x);

        [location addSubview:cv];


        if ([metadata.type isEqualToString:AVMetadataObjectTypeEAN13Code])
        {

        }
        else if ([metadata.type isEqualToString:AVMetadataObjectTypeUPCECode])
        {

        }
        else if ([metadata.type isEqualToString:AVMetadataObjectTypeEAN8Code])
        {

        }
        else if ([metadata.type isEqualToString:AVMetadataObjectTypeQRCode])
        {

        }
    }
}

2 个答案:

答案 0 :(得分:8)

您需要使用AVMetadataMachineReadableCodeObject中的corner属性在检测到的代码周围绘制一个透视框。

请参阅https://github.com/werner77/WECodeScanner

上的示例

答案 1 :(得分:0)

transformedMetadataObject(for:)上使用AVCaptureVideoPreviewLayer方法。

在下面的AVCaptureMetadataOutputObjectsDelegate方法中,previewLayerAVCaptureVideoPreviewLayer的实例。

func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {        
    if let metadataObject = metadataObjects.first, let transformedMetadataObject = previewLayer.transformedMetadataObject(for: metadataObject) {
        print(transformedMetadataObject.bounds)
    }    
}