zoukankan      html  css  js  c++  java
  • ios---二维码的扫描

    二维码扫描

    • 使用ios的AVFoundation框架实现二维码扫描
    • 第一步:设置相机访问权限;在Info.plist添加Privacy - Camera Usage Description权限
    • 第二步:导入AVFoundation框架 #import <AVFoundation/AVFoundation.h>
    • 第三步:签订AVCaptureMetadataOutputObjectsDelegate 协议
    • 第四步:设置输入输出的中间桥梁
    @property(nonatomic, strong)AVCaptureSession *session;/
    
    • 第五步:扫描方法
     -(void)startScanWithSize:(CGFloat)sizeValue{
        AVCaptureDevice *device=[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        AVCaptureDeviceInput *input=[AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
        if(input){
            AVCaptureMetadataOutput *output=[[AVCaptureMetadataOutput alloc]init];
            [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
            self.session=[[AVCaptureSession alloc]init];
            [_session setSessionPreset:AVCaptureSessionPresetHigh];
            [_session addInput:input];
            [_session addOutput:output];
            output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code,AVMetadataObjectTypeCode128Code];
            AVCaptureVideoPreviewLayer *layer=[AVCaptureVideoPreviewLayer layerWithSession:_session];
            layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
            CGFloat xx=(self.view.bounds.size.width-sizeValue)/2;
            CGFloat yy=(self.view.bounds.size.height-sizeValue)/2;
            layer.frame=CGRectMake(xx, yy, sizeValue, sizeValue);
            [self.view.layer insertSublayer:layer atIndex:0];
            [_session startRunning];
        }
    }
    
    • 第六步:处理扫描结果
    -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
        if(metadataObjects.count>0){
            [_session stopRunning];
            AVMetadataMachineReadableCodeObject *metadataobject=[metadataObjects objectAtIndex:0];
            NSLog(@"%@",metadataobject.stringValue);
            AVCaptureVideoPreviewLayer *layer = (AVCaptureVideoPreviewLayer *)[[self.view.layer sublayers] objectAtIndex:0];
            [layer removeFromSuperlayer];
        }
    }
    
    
  • 相关阅读:
    AD域修改组策略
    C#图像处理
    JsonResult序列化并保存json文件 以及对json文件读取反序列
    Git+Github代码管理控制
    Math.random控制随机数范围
    vue使用全局element-ui组件
    css3 vw、vh属性详解,以及与%、rem的区别介绍
    vue 中安装使用sass 报错遇到的问题整理
    如何将本地项目上传到Github
    GitHub优秀项目
  • 原文地址:https://www.cnblogs.com/frankltf/p/7389107.html
Copyright © 2011-2022 走看看