zoukankan      html  css  js  c++  java
  • 浅谈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就是二维码的内容

  • 相关阅读:
    linux 文件系统管理三部曲之二:创建文件系统
    linux 文件系统管理三部曲之一:磁盘分区
    Django 链接MySQL及数据操作
    redis事务
    redis配置文件详解
    redis中hash数据类型
    redis的基础知识
    redis两种持久化方式RDB和AOF
    git命令
    .gitignore中添加的某个忽略文件并不生效
  • 原文地址:https://www.cnblogs.com/WLL-Hero/p/3720331.html
Copyright © 2011-2022 走看看