標籤:二維碼 av foundation
AVFoundation支援以下一維和二維碼的掃描:
- QR code
- Aztec
- EAN13
- EAN8
- UPC-E
- PDF417
- Code 93
- Code 39
- Code 39 mode 41
QR code就是我們所熟知的二維碼。
開啟ViewController.m,添加以下執行個體變數:
AVCaptureMetadataOutput *_metadataOutput;
當從視訊框架中檢測到中繼資料時,AVCaptureMetadataOutput會調用應用程式的回呼函數。AV Foundation支援兩種類型的中繼資料:機器可讀的編碼和Face Service。
添加以下代碼到setupCaptureSession的最後來實現對中繼資料的捕捉和處理:
_metadataOutput = [[AVCaptureMetadataOutput alloc] init]; dispatch_queue_t metadataQueue = dispatch_queue_create("com.yaming.ColloQR.metadata", 0); [_metadataOutput setMetadataObjectsDelegate:self queue:metadataQueue]; if([_captureSession canAddOutput:_metadataOutput]) { [_captureSession addOutput:_metadataOutput]; }這裡,我們首先建立AVCaptureMetadataOutput的執行個體,然後為其建立一個dispatch queue,這樣避免在回呼函數被調用時,阻塞主線程。
接下來,聲明本類遵循AVCaptureMetadataOutputObjectsDelegate協議:
@interface ViewController () <AVCaptureMetadataOutputObjectsDelegate>
實現代理方法:
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{ [metadataObjects enumerateObjectsUsingBlock:^(AVMetadataObject *obj, NSUInteger idx, BOOL *stop) { NSLog(@"Metadata: %@", obj); }];}每當AVCaptureMetadataOutput類檢測到新的中繼資料時,調用captureOutput方法,在captureOutput方法中,我們列印所有檢測到的中繼資料。
修改startRunning方法,在最後添加如下代碼:
_metadataOutput.metadataObjectTypes = _metadataOutput.availableMetadataObjectTypes;
這樣做的目的是設定要檢測的中繼資料類型為所有類型。
編譯運行,掃描以下二維碼將得到如下輸出:
2015-03-21 14:51:42.289 ColloQR[680:176124] Metadata: <AVMetadataMachineReadableCodeObject: 0x170221540, type="org.iso.QRCode", bounds={ 0.4,0.2 0.1x0.3 }>corners { 0.4,0.5 0.5,0.5 0.5,0.2 0.4,0.2 }, time 31026866447458, stringValue "iOS二維碼掃描"這樣我們就完成了使用AV Foundation進行二維碼掃描的功能。從log中可以看到,有bounds和conrners資訊,下一節我們將利用這個資訊,當掃碼成功時,為使用者提供可視的反饋。
轉載請註明出處:http://blog.csdn.net/yamingwu/article/details/44515625
iOS AV Foundation 二維碼掃描 02 掃碼