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];}条码类型有如下几种:12345678910AVMetadataObjectTypeUPCECodeAVMetadataObjectTypeCode39CodeAVMetadataObjectTypeCode39Mod43CodeAVMetadataObjectTypeEAN13CodeAVMetadataObjectTypeEAN8CodeAVMetadataObjectTypeCode93CodeAVMetadataObjectTypeCode128CodeAVMetadataObjectTypePDF417CodeAVMetadataObjectTypeQRCodeAVMetadataObjectTypeAztecCode扫瞄到二维码之后,会调用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就是二维码的内容