iOS7 AVFoundation 二维码扫瞄

 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 二维码扫瞄)