iOS7以上的二维码扫描

1.核心代码
启动摄像头
- (void)setupCamera 
{
 // Device 
 AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
// Input 
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
// Output
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc]init]; 
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
// Session 
 session = [[AVCaptureSession alloc]init];
 [session setSessionPreset:AVCaptureSessionPresetHigh]; 
if ([session canAddInput:input])
{
[session addInput:input];  
}
if ([session canAddOutput:output])
{
[session addOutput:output];
}
// 条码类型 AVMetadataObjectTypeQRCode
if ([output.availableMetadataObjectTypes containsObject:AVMetadataObjectTypeQRCode]) { 
output.metadataObjectTypes = @[AVMetadataObjectTypeQRCode];//[NSArray arrayWithObject:AVMetadataObjectTypeQRCode];
}
// Preview
AVCaptureVideoPreviewLayer *preview =
 
[AVCaptureVideoPreviewLayer layerWithSession:session];  
preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
CGRect imageViewFrame = imageView.frame;
 preview.frame = CGRectMake(imageViewFrame.origin.x + 10, imageViewFrame.origin.y + 10, imageViewW - 20, imageViewW - 20);
[self.view.layer insertSublayer:preview atIndex:0]; 
// Start
[session startRunning];
}
//扫描完成后的回调处理
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:
(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection 
{
if (scanIsOK) return; 
scanIsOK = YES; 
NSString *stringValue;
if ([metadataObjects count] > 0) 
{
AVMetadataMachineReadableCodeObject *metadataObject = [metadataObjects objectAtIndex:0];
 
stringValue = metadataObject.stringValue;
}
 [session stopRunning];
[timer invalidate];
timer = nil; 
 
if ([UIUtils checkURL:stringValue]) { 
 }else{ 
}
}

posted on 2015-12-03 10:01  没有14  阅读(67)  评论(0)    收藏  举报

导航