2016-11-03 3 views
-4

질문은 약간 추상적 인 것 같지만 일반적으로 동일한 바코드 (최대 3 개)를 감지 할 수있는 바코드 스캐닝 앱을 개발해야합니다. 시각. 어느 누구도 작업에 대한 좋은 API를 알고 있습니까? (신속하거나 객관적인 C는 괜찮습니다). 어떤 도움이라도 대단히 감사합니다! 감사. 이미 Zxing API가있는 앱이 있지만 여러 바코드를 감지 할 수있는 옵션이없는 것 같습니다.IOS 바코드 스캐닝 API 동시에 3 바코드를 읽을 수 있음

답변

1

이 필요합니다. 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 ...)? –

관련 문제