이 필요합니다. 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에 있습니다.
도움을 주셔서 감사합니다. 나는 튜토리얼과 소스 코드를 읽고있다. 그러나 해결해야 할 1 가지 문제는 동시에 여러 바코드를 읽을 수있는 기능 (최대 3 개) (1 줄에 3 개의 바코드)입니다. 우리가 달성 할 수있는 방법이 있습니까? –
captureOutput : didOutputMetadataObject : 3 개의 바코드를 잡을 수 있다고 생각합니다. 그러나 당신은 반환을 제거해야한다; 첫 번째 바코드가 스캔 된 후 그리고 다른 바코드에 대한 다른 시나리오를 처리해야합니다. –
자습서는 QR을 잡을 수있는 것처럼 보입니다. QR과 바코드 모두를 어떻게 잡을 수 있습니까? (1D 및 2D ...)? –