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にあります。
ありがとうございました。私はチュートリアルとソースコードを読んでいます。しかし、解決すべき1つの問題は、複数のバーコードを同時に読み取る能力(最大3)(1行に3つのバーコード)です。それを達成する方法はありますか? –
captureOutput:didOutputMetadataObject:私はあなたが3つのバーコードを捕まえることができると思います。しかし、あなたはリターンを取り除くべきです。最初のバーコードがスキャンされた後そして、他のバーコードのための他のシナリオを処理する必要があります。 –
チュートリアルはQRだけを捕まえることができるようです。 QRとバーコードの両方をどのように捕まえることができますか? (1Dと2D ...)? –