关于iOS二维码

关于iOS扫描和生成二维码,多数人用的是第三方zxing或者zbar,不可否认,这俩个框架是非常方便的,但是你知不知道apple早就为我们封装好了关于二维码的一些操作,并且速度以及内存占用量都比第三方优秀许多,废话不多说,上代码吧。

一扫描二维码

用的是AV框架的相机操作,共分为5步。首先应该获取相机的权限:   

//判断相机是否能够使用
    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if(status == AVAuthorizationStatusAuthorized)
    {
        // authorized
       
    } else if(status == AVAuthorizationStatusDenied)
    {
        // denied
        return ;
    } else if(status == AVAuthorizationStatusRestricted)
    {
        // restricted
    } else if(status == AVAuthorizationStatusNotDetermined)
    {
        // not determined
        [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
            if(granted){
               
            } else {
                return;
            }
        }];
    }

获取到相机权限之后进行第二步:创建会话和添加设备

   
    AVCaptureSession * session = [[AVCaptureSession alloc]init];

    AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

第三步:创建input和output,并加入会话

  AVCaptureDeviceInput *input = [[AVCaptureDeviceInput alloc]initWithDevice:device error:nil];
    
    [session addInput:input];
    
    AVCaptureMetadataOutput *outPut = [[AVCaptureMetadataOutput alloc]init];
    
    [outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue() ];
    
    [session addOutput:outPut];
    
    [outPut setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
    
第四步。开始扫描

  AVCaptureVideoPreviewLayer *videoLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:session];
    
    videoLayer.frame = self.view.bounds;
    
    videoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;//填充模式
    
    [self.view.layer addSublayer:videoLayer];
    
    [session startRunning];

第五步 output的代理获得扫描的信息

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection

{
    NSLog(@"%@",[metadataObjects lastObject].stringValue);
}

 

ps:原先不是多么了解二维码,阅读并借鉴了博客园一位仁兄的分享,并归纳了一下。

 

posted @ 2016-04-15 08:56  卡卡我来报  阅读(189)  评论(0)    收藏  举报