IOS条码扫描api可同时读取3个条码

IOS barcode scanning api capable of reading 3 barcode at the same time

这个问题似乎有点抽象,但一般来说我需要开发一个能够同时检测多个条码(最多3个)的条码扫描应用程序。

有谁知道 api 对这项任务有好处吗? (Swift 或 Objective C 都可以)。我已经有了 Zxing api 的应用程序,但似乎没有检测多个条形码的选项。

你需要AVFoundation! AVFoundation 可以扫描条形码。

对此功能的主要兴趣:

#pragma mark - AVCaptureMetadataOutputObjectsDelegate methods
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
//THIS YOU CAN USE ARRAY OF AVMetadataObjectType
    NSString *supportedBarcodeType = AVMetadataObjectTypeCode128Code;

    for (AVMetadataObject *barcodeMetadata in metadataObjects) {
        if ([barcodeMetadata.type isEqualToString:supportedBarcodeType]) {
            AVMetadataMachineReadableCodeObject *barcodeObject = (AVMetadataMachineReadableCodeObject *)[self.captureLayer transformedMetadataObjectForMetadataObject:barcodeMetadata];
        //barcode is FIND!
            NSString *capturedBarcode = [barcodeObject stringValue];

            return;
        }
    }
}

配置方法:

static char * const metadataOutputQueue = "metadataOutputQueue";

- (void)configureSessionWithError:(NSError **)error {    

    self.captureSession = [[AVCaptureSession alloc] init];

    NSError *inputError = nil;
    AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&inputError];

    if ( nil != inputError || nil == input) {
        *error = inputError;
        return;
    }

    [self.captureSession addInput:input];

    AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init];
    [self.captureSession addOutput:captureMetadataOutput];

    dispatch_queue_t dispatchQueue = dispatch_queue_create(metadataOutputQueue, NULL);
    [captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue];
//THIS YOU CAN ADD ARRAY OF AVMetadataObjectType FOR DETECTING BARCODES
    [captureMetadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeCode128Code]];

    self.captureLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession];
    [self.captureLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
    [self.captureLayer setFrame:self.cameraPreviewView.layer.bounds];

    [self.cameraPreviewView.layer addSublayer:self.captureLayer];

    self.sessionConfigured = YES;
}

技术说明this! Tutorial you can find on this site