2016-11-03 8 views
-4

質問は少し抽象的だと思われますが、一般的に私は同じバーコードで複数のバーコード(最大3個)を検出できるバーコードスキャンアプリを開発する必要があります時間。どのユーザーもタスクのための良いAPIを知っていますか? (迅速または目的のCはOKです)。どんな助けでも大いに感謝しています!ありがとう。私は既にZxing APIを使ったアプリを持っていますが、複数のバーコードを検出するオプションはありません。IOSバーコードスキャンapiは同時に3つのバーコードを読み取ることができます

答えて

1

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!チュートリアルはthis siteにあります。

+0

ありがとうございました。私はチュートリアルとソースコードを読んでいます。しかし、解決すべき1つの問題は、複数のバーコードを同時に読み取る能力(最大3)(1行に3つのバーコード)です。それを達成する方法はありますか? –

+0

captureOutput:didOutputMetadataObject:私はあなたが3つのバーコードを捕まえることができると思います。しかし、あなたはリターンを取り除くべきです。最初のバーコードがスキャンされた後そして、他のバーコードのための他のシナリオを処理する必要があります。 –

+0

チュートリアルはQRだけを捕まえることができるようです。 QRとバーコードの両方をどのように捕まえることができますか? (1Dと2D ...)? –

関連する問題