美文网首页iOS学习笔记技术类iOS Developer
iOS开发-五步完成二维码扫描

iOS开发-五步完成二维码扫描

作者: for_in | 来源:发表于2016-06-23 19:04 被阅读3404次

由于各种第三方二维码扫描组件都不支持64位,并且已经停止更新很久了,所以现在一般都使用AVFoundation去实现二维码/条码的扫描。

基本所有app的扫一扫要跳转一个新的界面去,所以最好新建一个控制器ScanViewController

第一步

导入AVFoundation框架和遵守协议<AVCaptureMetadataOutputObjectsDelegate>

#import <AVFoundation/AVFoundation.h>
@interface ScanViewController ()<AVCaptureMetadataOutputObjectsDelegate>

第二步

初始化捕捉设备AVCaptureDevice

AVCaptureDevice *captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

创建输入

AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
    if (!input) {
        NSLog(@"%@", [error localizedDescription]);
        return;
    }

创建输出

AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutput alloc] init];

创建一个会话,并添加输入和输出

self.captureSession = [[AVCaptureSession alloc] init];
[self.captureSession addInput:input];
[self.captureSession addOutput:captureMetadataOutput];

设置输出数据的类型,AVMetadataObjectTypeQRCode为二维码类型,其他类型可以到这个头文件AVMetadataObject.h里面查看

[captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]];

第三步

创建图层,摄像头捕捉到的画面都会在这个图层显示

self.videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.captureSession];

设置图层填充方式

[self.videoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

设置图层的frame

[self.videoPreviewLayer setFrame:self.view.layer.bounds];

将图层添加到预览view的图层上

[self.view.layer addSublayer:self.videoPreviewLayer];

第四步

创建一个串行队列,并设置代理

dispatch_queue_t dispatchQueue;
dispatchQueue = dispatch_queue_create("myQueue", NULL);
[captureMetadataOutput setMetadataObjectsDelegate:self queue:dispatchQueue];

第五步

设置扫码范围

captureMetadataOutput.rectOfInterest = CGRectMake(0.2f, 0.2f, 0.8f, 0.8f);

开始扫码

[self.captureSession startRunning];

实现代理方法获取扫描到的数据

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
    //判断是否有数据
    if (metadataObjects != nil && [metadataObjects count] > 0) {
        AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];
        //判断回传的数据类型
        if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {
            self.license = [metadataObj stringValue];
            [self performSelectorOnMainThread:@selector(stopReading) withObject:nil waitUntilDone:NO];
        }
    }
}

完整的Demo在这里https://github.com/HuangJiayong/HJYScanCode

相关文章

  • iOS开发:二维码扫描与生成(扫描篇)

    iOS开发中经常要用到生成二维码与扫描二维码的功能,iOS7开始,系统支持原生的扫描二维码,iOS7 扫描二维码可...

  • iOS 二维码扫描

    iOS开发中 二维码扫描 前言 在移动开发中二维码扫描这种事情越来越常见了,在iOS中我选择了用ZBar这个第三方...

  • iOS开发之二维码扫描

    iOS开发之二维码扫描 在 iOS7 以前,在IOS中实现二维码和条形码扫描,我们所知的有,两大开源组件 ZBar...

  • IOS二维码(ZXingObjc)

    IOS二维码(ZXingObjc) 前言 公司最近上线一款产品,是通过二维码扫描登录。开发阶段的时候使用的是IOS...

  • iOS APP原生一维码、二维码扫描使用介绍

    在app开发中,经常会遇到二维码扫描的功能。 今天我给大家介绍一下,iOS原生一维码、二维码扫描使用。简单实用 话...

  • iOS APP原生二维码使用介绍

    在app开发中,经常会遇到二维码扫描的功能。 今天我给大家介绍一下,iOS原生一维码、二维码扫描使用。简单实用 话...

  • ZBar

    iOS中使用ZBar扫描二维码自定义扫描界面

  • 二维码的生成与扫描

    在简书上看到内容就跟着做了一遍。做个记录。首先是二维码的扫描。iOS开发-二维码扫描这里需要用到的是AVFound...

  • 使用AVFoundation框架实现扫描二维码

    iOS 7之前,开发者开发扫描二维码功能时,一般会借助第三方库,常用的如ZBarSDK等。iOS 7之后,苹果官方...

  • IOS中生成二维码、扫描二维码

    title : IOS中生成二维码、扫描二维码category : UI IOS中生成二维码、保存二维码 标签(空...

网友评论

本文标题:iOS开发-五步完成二维码扫描

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