文档章节

IOS --自带二维码扫描

求是科技
 求是科技
发布于 2015/02/26 09:27
字数 596
阅读 142
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

具体的可以参考这篇文章:http://www.appcoda.com/qr-code-ios-programming-tutorial/

      最近由于公司项目需要,我负责二维码的生成和扫描部分。由于苹果规定自2015/02/01后上架的作品必须支持64位,所以经过综合比较后,二维码的扫描部分我决定采用苹果自带的AVFoundation框架来实现扫描,网上有很多关于ZBar和Zxing的例子,有兴趣的朋友可以去研究下。

      1.使用前先加入框架头文件和代理信息,如下:

#import <AVFoundation/AVFoundation.h>
@interface QRCodeViewController : UIViewController<AVCaptureMetadataOutputObjectsDelegate>

      2.用到如下几个类

@property (strong,nonatomic) AVCaptureDevice *device;
@property (strong,nonatomic) AVCaptureDeviceInput *input;
@property (strong,nonatomic) AVCaptureMetadataOutput *output;
@property (strong,nonatomic) AVCaptureSession *session;
@property (strong,nonatomic) AVCaptureVideoPreviewLayer *preview;

     3.具体用法如下

    //Device
    device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
     //Input
    input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
     //判断是否有输入
    if (!input)
    {
        NSLog(@"error info:%@",[error localizedDescription]);
        return NO;
    }
     //Session
    session = [[AVCaptureSession alloc] init];
    [session setSessionPreset:AVCaptureSessionPresetHigh];
    [session addInput:input];
     //Output
    output = [[AVCaptureMetadataOutput alloc] init];
    [session addOutput:output];
    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
    //条码类型
    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
     //preview,扫描区域
    preview = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
    [preview setVideoGravity:AVLayerVideoGravityResizeAspectFill];
    //设置扫描区域
    [preview setFrame:frameView.layer.bounds];
    //将扫描view放在self.frameView上
    [self.frameView.layer addSublayer:preview];
    //Start
    [session startRunning];

      4.扫描到二维码后的操作,扫描到二维码之后就会调用如下方法

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
    NSString *stringValue;
    if (metadataObjects !=nil && [metadataObjects count] >0)
    {
        AVMetadataMachineReadableCodeObject *metadataObject = [metadataObjects objectAtIndex:0];
        //判断取到的对象类型
        if ([[metadataObject type] isEqualToString:AVMetadataObjectTypeQRCode])
        {
            [scanResult performSelectorOnMainThread:@selector(setText:) withObject:[metadataObject stringValue] waitUntilDone:NO];
        stringValue = [metadataObject stringValue];
        NSLog(@"扫描结果:%@",stringValue);
        
//        //直接跳往处理二维码controller
//        ProcessRQViewController *processRQViewController = [[ProcessRQViewController alloc] init];
//        //将取到的二维码的值传过去
//        processRQViewController.RQResult = stringValue;
//        //[self.navigationController pushViewController:processRQViewController animated:true];
//        [self presentViewController:processRQViewController animated:YES completion:NULL];
        
//        //直接跳往下载图片的页面
//        ProcessImageViewController *processImageViewController = [[ProcessImageViewController alloc] init];
//        //将取到的二维码的值传过去
//        processImageViewController.ImageResult = stringValue;
//        //跳转
//        [self presentViewController:processImageViewController animated:YES completion:NULL];
}

      5.至此结束

       本人亲测,好多二维码都可以扫描出来。但是在2月13号这天,项目经理让我用这个app扫描本公司营业执照二维码的时候,只能扫出营业执照前面的数字(本公司的营业执照:数字(一连串)+空一格+汉字(好几个)+空一格+一个连接地址)。找出bug后来不及修改,就直接过年了,如今过年来了,要及时堵住这个bug了。


    







© 著作权归作者所有

求是科技

求是科技

粉丝 104
博文 460
码字总数 240021
作品 0
成都
后端工程师
私信 提问
加载中

评论(0)

越狱的 iPhone、iPad 通过网站实现一键安装 ipa 格式的 APP 应用

1、已经越狱的 iPhone、iPad 设备,当通过其自带的 safari 浏览器访问 ipa 应用下载网站时,利用 itms-services 协议,可以一键安装 ipa 文件的 iOS 应用,例如: <a href="itms-services:/...

问天123
2012/06/29
844
0
iOS使用系统API扫描二维码条形码&限制扫描区域

SuperScanner QRScanner BarCodeScanner 二维码条形码扫描 iOS二维码条形码扫描,支持iOS7+,限制扫描区域,提高扫描速度 iOS使用系统API进行二维码条形码扫描&限制扫描区域 ---GitHub看了不...

JeansH
2015/10/20
2.1K
0
iOS开发者证书和描述文件申请

iOS开发者证书是用于开发调试的,可以直接连接你的xcode进行灌装到你的设备进行测试,第一步需要添加你的设备id然后再申请iOS开发证书。 现在xcode也可以免证书进行调试了。 一、添加调试设备...

osc_4jkldo6l
2019/04/12
1
0
iOS学习——iOS原生实现二维码扫描

  最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时...

osc_ls8y724v
2018/03/13
2
0
常见的移动端H5页面开发遇到的坑和解决办法

手机共通问题 问题一:用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经研究发现是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页字会非常小,所以苹果...

webmirror
2018/05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

认知智能技术三大技术体系之认知维度道翰天琼

认知维度技术体系是认知智能三大技术体系(认知维度,类脑模型,万维图普)之一 。认知维度技术体系以中西方哲学思想体系,认知语言学,形式语言学,三体论等思想体系为基础,以划分人类认知...

jackli2020
12分钟前
11
0
Oracle中如何实现分页+排序? 其中遇到的问题,你,注意了嘛???

分页 + 排序 一.简单分页: 需求:分页查询台账表T_ACCOUNT,每页10条记录 分析:我们在ORACLE进行分页查询,需要用到伪列ROWNUM和嵌套查询 我们首先显示前10条记录,语句如下: select rownu...

煌sir
15分钟前
91
0
使用JavaScript获取当前URL? - Get the current URL with JavaScript?

问题: All I want is to get the website URL. 我想要的只是获取网站URL。 Not the URL as taken from a link. 不是从链接获取的URL。 On the page loading I need to be able to grab the ......

技术盛宴
25分钟前
11
0
PHP实战之Cookie会话控制

目录 1. 前言 2. HTTP协议简介及原理 2.1会话控制简介及HTTP浅析 3. COOKIE的使用 3.1 Cookie简介 3.2 cookie使用场景 3.2.1操作cookie思维导图 3.2.2操作cookie代码 3.2.3 setrawcookie的使...

六道木
26分钟前
19
0
Python笔记:批量提取PDF表格数据(每页都含有相同表头的)

现在有一份PDF数据,里面有两页,每页都有相同的数据结构但数据内容不同的数据表(每页都有相同的表头),现在需要使用Python将它批量提取出来。 我们需要使用pdfplumber模块(因为有墙的原因...

tengyulong
38分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部