• 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];
        }
    }
    
    
  • 相关阅读:
    C#下给数字前面补0的方法
    Notepad++ xml 文件不能语法着色的问题解决
    excel 技巧
    编译时报警 implicit declaration of function
    配置ASP.NET平台时遇到的“访问IIS元数据库失败”解决方案
    用360安全卫士批量本地快速给系统打补丁【转贴】
    新雨情系统随笔
    我的开发博客开通了
    JQuery资料
    IGNORE_DUP_KEY = OF的作用
  • 原文地址:https://www.cnblogs.com/frankltf/p/7389107.html
Copyright © 2020-2023  润新知