首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用AVCaptureMetadataOutput和AVFoundation扫描条形码

用AVCaptureMetadataOutput和AVFoundation扫描条形码
EN

Stack Overflow用户
提问于 2013-11-30 20:20:34
回答 2查看 5.9K关注 0票数 2

我正在使用AVFoundation和AVCaptureMetadataOutput在iOS7中扫描二维码,我提供了一个允许用户扫描条形码的视图控制器。它工作得很好,即。正在扫描条形码,我可以将条形码字符串输出到控制台。

但它会一遍又一遍地扫描,见屏幕截图。我想让它做的是只扫描条形码一次,然后dismissViewController。

下面是我的委托方法代码:

代码语言:javascript
复制
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
CGRect highlightViewRect = CGRectZero;

AVMetadataMachineReadableCodeObject *barCodeObject;
NSString *detectionString = nil;
NSArray *barCodeTypes = @[AVMetadataObjectTypeUPCECode, AVMetadataObjectTypeCode39Code, AVMetadataObjectTypeCode39Mod43Code,
        AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode93Code, AVMetadataObjectTypeCode128Code,
        AVMetadataObjectTypePDF417Code, AVMetadataObjectTypeQRCode, AVMetadataObjectTypeAztecCode];

for (AVMetadataObject *metadata in metadataObjects) {
    for (NSString *type in barCodeTypes) {
        if ([metadata.type isEqualToString:type])
        {
            barCodeObject = (AVMetadataMachineReadableCodeObject *)[self.preview transformedMetadataObjectForMetadataObject:(AVMetadataMachineReadableCodeObject *)metadata];
            highlightViewRect = barCodeObject.bounds;
            detectionString = [(AVMetadataMachineReadableCodeObject *)metadata stringValue];
            break;
        }
    }

    if (detectionString != nil)
    {
        NSLog(@"Barcode: %@", detectionString);

        break;
    }
    else
        NSLog(@"None");
}

self.highlightView.frame = highlightViewRect;

}

EN

回答 2

Stack Overflow用户

发布于 2013-12-16 17:11:18

代码语言:javascript
复制
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
    ....
    self.highlightView.frame = highlightViewRect;
    [_session stopRunning]; //<---I add this and it worked for me.
}

Here is a good link可能会有帮助。

票数 2
EN

Stack Overflow用户

发布于 2018-04-11 16:02:04

扫描条形码后,需要使用:captureSession.stopRunning()停止captureSesson,否则即使停止videoPreviewLayer,它也会继续扫描代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20300152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档