1、扫描二维码可以,扫描条形码一直没有反应
2、demo只集成条形码,则没有这个问题
---
>
Step1:需要导入:AVFoundation Framework 包含头文件:
#import
Step2:设置捕获会话
设置 AVCaptureSession 和 AVCaptureVideoPreviewLayer 成员
[即,创建会话和输出对象]
Step3:创建会话,读取输入流
```Objective-C
- (void)beginScanning
{
//获取摄像设备
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//创建输入流
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
if (!input) return;
//创建输出流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
//设置代理 在主线程里刷新
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//设置有效扫描区域
CGRect scanCrop=[self getScanCrop:_scanWindow.bounds readerViewBounds:self.view.frame];
output.rectOfInterest = scanCrop;
__weak typeof(self) weakSelf = self;
[[NSNotificationCenter defaultCenter]addObserverForName:AVCaptureInputPortFormatDescriptionDidChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
if (weakSelf){
//调整扫描区域
AVCaptureMetadataOutput *output = weakSelf.session.outputs.firstObject;
output.rectOfInterest = scanCrop;
}
}];
//初始化链接对象
_session = [[AVCaptureSession alloc]init];
//高质量采集率
[_session setSessionPreset:AVCaptureSessionPresetHigh];
[_session addInput:input];
[_session addOutput:output];
//设置扫码支持的编码格式(如下设置条形码和二维码兼容)
output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.view.layer.bounds;
[self.view.layer insertSublayer:layer atIndex:0];
//开始捕获
[_session startRunning];
}
Step4:停止读取
-(void)stopReading
{
// 停止会话
[_captureSessionstopRunning];
_captureSession=nil;
}
Step5:代理中获取捕获数据,并处理
-(void)captureOutput:(AVCaptureOutput*)captureOutputdidOutputMetadataObjects:(NSArray*)metadataObjectsfromConnection:(AVCaptureConnection*)connection
{
if(metadataObjects!=nil&&[metadataObjectscount]>0)
{
AVMetadataMachineReadableCodeObject* metadataObj =[metadataObjectsobjectAtIndex:0];
NSString*result;
if([[metadataObjtype]isEqualToString:AVMetadataObjectTypeQRCode])
{
result=metadataObj.stringValue;
}
else
{
NSLog(@"不是二维码");
}[selfperformSelectorOnMainThread:@selector(reportScanResult:)withObject:resultwaitUntilDone:NO];
}
}
```
---
以上基本就是二维码的获取流程,和扫一扫二维码伴随的就是开启系统照明,这个比较简单,也是利用AVCaptureDevice,请看如下实现:
参考链接:
http://my.oschina.net/jeans/blog/519365
http://www.cnblogs.com/lzjsky/p/5057134.html
网友评论