iOS7,AVFoundation中现在已经内置支持一维和二维码的扫瞄,iOS6及之前的想要扫瞄二维码,还是需要添加第三方库ZXing和ZBar。
ZBar生成二维码:http://blog.csdn.net/cafei111/article/details/8924297
先添加AVFoundation.framework
#import 
<AVFoundation/AVFoundation.h>
@interface QRcodeViewController 
:UIViewController<AVCaptureMetadataOutputObjectsDelegate>
@property 
(strong,nonatomic)AVCaptureDevice *device;
@property 
(strong,nonatomic)AVCaptureDeviceInput *input;
@property 
(strong,nonatomic)AVCaptureMetadataOutput *output;
@property 
(strong,nonatomic)AVCaptureSession *session;
@property 
(strong,nonatomic)AVCaptureVideoPreviewLayer *preview;
@end
- 
(void)setupCamera
{
    // Device
    
self.device = 
[AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];
   
 
    // Input
    self.input = 
[AVCaptureDeviceInputdeviceInputWithDevice:self.deviceerror:nil];
   
 
    // Output
    self.output = 
[[AVCaptureMetadataOutputalloc]init];
    
[self.outputsetMetadataObjectsDelegate:selfqueue:dispatch_get_main_queue()];
   
 
    // Session
    self.session = 
[[AVCaptureSessionalloc]init];
   
[self.sessionsetSessionPreset:AVCaptureSessionPresetHigh];
   if 
([self.sessioncanAddInput:self.input])
    
{
        
[self.sessionaddInput:self.input];
    }
   if 
([self.sessioncanAddOutput:self.output])
    
{
        
[self.sessionaddOutput:self.output];
    }
   
 
    // 条码类型
    
self.output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];
   
 
    // Preview
    self.preview = 
[AVCaptureVideoPreviewLayerlayerWithSession:self.session];
    
self.preview.videoGravity 
=AVLayerVideoGravityResizeAspectFill;
    self.preview.frame 
=CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height);
   
[self.view.layeraddSublayer:self.preview];
   
 
    // Start
    
[self.sessionstartRunning];
}
条码类型有如下几种:
1
2
3
4
5
6
7
8
9
10
AVMetadataObjectTypeUPCECode
AVMetadataObjectTypeCode39Code
AVMetadataObjectTypeCode39Mod43Code
AVMetadataObjectTypeEAN13Code
AVMetadataObjectTypeEAN8Code
AVMetadataObjectTypeCode93Code
AVMetadataObjectTypeCode128Code
AVMetadataObjectTypePDF417Code
AVMetadataObjectTypeQRCode
AVMetadataObjectTypeAztecCode
扫瞄到二维码之后,会调用delegate
#pragma 
mark AVCaptureMetadataOutputObjectsDelegate
- 
(void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputMetadataObjects:(NSArray *)metadataObjects 
fromConnection:(AVCaptureConnection *)connection
{
   NSString 
*stringValue;
    
   if ([metadataObjectscount] 
>0) {
       
AVMetadataMachineReadableCodeObject *metadataObject = 
[metadataObjectsobjectAtIndex:0];
        
stringValue = metadataObject.stringValue;
    
}
    
    
[_sessionstopRunning];
    
    
[selfdismissViewControllerAnimated:YEScompletion:^{
       
UIAlertView *alert = 
[[UIAlertViewalloc]initWithTitle:nil
                                                       
message:stringValue
                                                      
delegate:nil
                                             
cancelButtonTitle:@"OK"
                                             
otherButtonTitles:nil,nil];
        
[alertshow];
    
}];
}
这个委托方法里面的字符串stringValue就是二维码的内容
浅谈iOS7 AVFoundation 二维码扫描,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/WLL-Hero/p/3720331.html