美文网首页
二维码扫描与结果处理

二维码扫描与结果处理

作者: 不疯魔难以成佛 | 来源:发表于2016-11-23 11:19 被阅读0次

    <pre><code>

    import "QYScanCtrl.h"

    import <AVFoundation/AVFoundation.h>

    import "trConst.h"

    @interface QYScanCtrl ()<AVCaptureMetadataOutputObjectsDelegate,UIWebViewDelegate>

    //拍摄会话

    @property(nonatomic,strong)AVCaptureSession
    *session;

    //预览视图

    @property(nonatomic,strong)AVCaptureVideoPreviewLayer
    *preview;

    @end

    @implementation
    QYScanCtrl

    • (void)viewDidLoad {

      [superviewDidLoad];

      self.view.backgroundColor= [UIColorwhiteColor];

      self.title = @"防伪查询";

      //扫描

      [selfscan];

    }

    -(void)scan{

            //    摄像头输入设备
    
            //捕获设备,默认后置摄像头
    
            AVCaptureDevice
    

    *device = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

            NSError *error = nil;
    
            //输入设备
    
            AVCaptureDeviceInput
    

    *inputDevice = [AVCaptureDeviceInputdeviceInputWithDevice:device error:&error];

            //    元数据输出对象
    
            AVCaptureMetadataOutput
    

    *dataOutput = [[AVCaptureMetadataOutputalloc]init];

            //    拍摄会话
    
            self.session = [[AVCaptureSession alloc]init];
    
            //    建立通道
    
            //先判断是否有该设备
    
            if ([self.session canAddInput:inputDevice])
    

    {

                [self.session addInput:inputDevice];
    
            }else{
    
                NSLog(@"不支持该设备");
    
                return;
    
    
          }
    
            if ([self.session canAddOutput:dataOutput])
    

    {

                [self.session addOutput:dataOutput];
    
            }else{
    
                NSLog(@"不支持该设备");
    
                return;
          }
    
            //    设置元数据输出对象相关属性
    
            dataOutput.metadataObjectTypes = @[@"org.iso.QRCode"];
    
            //    实现代理方法
    
            [dataOutput setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    
            //    开始扫描
    
            [self.session startRunning];
    
            //    添加预览视图
    
            AVCaptureVideoPreviewLayer
    

    *preview = [AVCaptureVideoPreviewLayerlayerWithSession:self.session];

            self.preview = preview;
    
            //设置frame
    
            preview.frame = self.view.bounds;
    
            //添加到view图层
    
            [self.view.layer addSublayer:preview];
    

    }

    pragma mark --代理方法

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

    if(metadataObjects != nil&& [metadataObjects count] > 0) {
    
        AVMetadataMachineReadableCodeObject*metadataObj = [metadataObjects objectAtIndex:0];
    
        NSString *result;
    
        if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode])
    

    {

     result = metadataObj.stringValue;
    
        } else {
    
            NSLog(@"不是二维码");
      }
    
        //扫描完成,停止扫描
    
        [self.session stopRunning];
    
        [self.preview removeFromSuperlayer];
    
         self.preview = nil;
    
        [self scanResult:result];
    

    }

    }

    -(void)scanResult:(NSString*)result{

    UIWebView*web = [[UIWebViewalloc]initWithFrame:CGRectMake(0, 64, screenW, screenH)];
    
    [self.view addSubview:web];
    //扫描完成加载结果页面
    NSURL*url = [NSURLURLWithString:[NSString stringWithFormat:@"%@%@%@",HTTP_HOST_URL,HTTP_H5_SCAN,result]];
    NSURLRequest*request = [NSURLRequest requestWithURL:url];
    [web loadRequest:request];
    

    }

    @end

    相关文章

      网友评论

          本文标题:二维码扫描与结果处理

          本文链接:https://www.haomeiwen.com/subject/rstvpttx.html