对于ios7扫描二维码功能的实现

在ios7曾经,我们开发二维码扫描,或者生产都须要借助第三方的开源库进行开发。

然后升级到ios7时,在passbook中苹果自带二维码扫描功能,并且扫描速度很快,秒杀一切第三方开源库。

所以,我们做二维码的开发选用自带sdk优先级应该高于其它的库。

说到二维码的开发。我们须要用到这两个对象。例如以下。

@property (nonatomic,strong)
AVCaptureSession *captureSession;

@property (nonatomic,strong)
AVCaptureVideoPreviewLayer *videoPreviewLayer;

CaptureSession 这是个捕获会话,也就是说你能够用这个对象从输入设备捕获数据流。

AVCaptureVideoPreviewLayer 能够通过输出设备展示被捕获的数据流。

首先我们应该推断当前设备是否有捕获数据流的设备。

AVCaptureDevice *captureDevice = [AVCaptureDevicedefaultDeviceWithMediaType:AVMediaTypeVideo];

AVCaptureDeviceInput *input = [AVCaptureDeviceInputdeviceInputWithDevice:captureDevice
error:&error];

if (!input) {

NSLog(@"%@", [errorlocalizedDescription]);

return NO;

}

如上,假设捕获到错误。直接返回。

初始化一个CaptureSession对象

_captureSession = [[AVCaptureSessionalloc]
init];

设置会话的输入设备

[_captureSession
addInput:input];

相应输出

AVCaptureMetadataOutput *captureMetadataOutput = [[AVCaptureMetadataOutputalloc]
init];

[_captureSession addOutput:captureMetadataOutput];

创建一个队列

dispatch_queue_t dispatchQueue;

dispatchQueue = dispatch_queue_create("myQueue",NULL);

[captureMetadataOutput setMetadataObjectsDelegate:selfqueue:dispatchQueue];

[captureMetadataOutput setMetadataObjectTypes:[NSArrayarrayWithObject:AVMetadataObjectTypeQRCode]];

降捕获的数据流展现出来

_videoPreviewLayer = [[AVCaptureVideoPreviewLayeralloc]
initWithSession:_captureSession];

[_videoPreviewLayersetVideoGravity:AVLayerVideoGravityResizeAspectFill];

[_videoPreviewLayer
setFrame:_viewPreview.layer.bounds];

[_viewPreview.layeraddSublayer:_videoPreviewLayer];

開始捕获

[_captureSession
startRunning];

获得的数据在

AVCaptureMetadataOutputObjectsDelegate 唯一定义的方法中

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

推断是否有数据。是否是二维码数据

if (metadataObjects !=
nil && [metadataObjects count] >
0) {

AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjectsobjectAtIndex:0];

if ([[metadataObjtype]
isEqualToString:AVMetadataObjectTypeQRCode]) {

//获得扫描的数据。并结束扫描

[selfperformSelectorOnMainThread:@selector(stopReading:)withObject:metadataObj.stringValuewaitUntilDone:NO];

}

}

每天一小步,希望能帮助一些朋友。

晚安啦。

。。。

时间: 2024-12-19 15:59:02

对于ios7扫描二维码功能的实现的相关文章

qt for ios扫描二维码功能实现

问题: 公司项目考虑到跨平台一直都是用qt做,由于项目需求,项目上要增加一个二维码扫描功能,在安卓可以用QVideoProbe实现抓取摄像头视频帧,用QZxing解码图片,从而实现二维码扫描,但是在ios上,QVideProbe并不支持,所以只好选择其他抓取视频帧的方法,考虑使用OPencv实现抓取视频帧,但是在查看ios文档时,ios7 以上直接支持二维码扫描功能,所以放弃使用opencv抓取 + zxing解码的方法.从而采取ios官方提供的二维码解码功能. 实现: 由于我们项目ui一直是用

iOS7+ 扫描二维码和条形码实现 耗时操作

iOS7以前都是用Zxing Zbar 来实现 扫描二维码以及条形码,从iOS7 出来后,系统自带API很强大,渐渐也就放弃了Zxing Zbar的使用, 直接上主要代码: - (void)setupCamera { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [HUDUtils showHUDProgress:@""]; AVAuthorizationStatus a

使用vue做移动app时,调用摄像头扫描二维码

现在前端技术发展飞快,前端都能做app了,那么项目中,也会遇到调用安卓手机基层的一些功能,比如调用摄像头,完成扫描二维码功能 下面我就为大家讲解一下,我在项目中调用这功能的过程. 首先我们需要一个中间框架,hbuilder http://www.html5plus.org/doc/zh_cn/accelerometer.html 这个是html5+的文档地址,我们找到Barcode模块, 有这么多,然后我们往下找 找到这段代码 <!DOCTYPE html> <html> <

ios7新增api实现扫描二维码

本来用的ZBar开源库实现的扫描二维码,但是貌似不支持arm64了,也没有在更新. 现在不用适配ios7以下,而iOS新增系统API已支持扫码,参考老外的一篇博客做了个demo,需要的可以参考下 参考博客:http://www.appcoda.com/qr-code-ios-programming-tutorial/ #import <AVFoundation/AVFoundation.h> @interface QRCodeReadController : BaseViewControlle

PHP微信扫描二维码登录网站代码示例

扫描二维码登录对于现在的web应用来说,确实是个很炫酷的功能,安全性也可以保障,不少朋友可能觉得这是个很复杂的工作,其实不然,真正说来只有几个步骤而已. 原理 PC浏览器展示一张二维码图片,该图片二维码值为一段绝对地址的url,大致如下:http://www.example.com/oauth/qrcode?key=key PC浏览器定期轮询 http://www.example.com/oauth/query,可能有的同学会问,怎么不用带上key?这里我们用session来保存key,所以链接

Android二维码功能实现,在程序内嵌入ZXing项目

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9526247 最近二维码真是越来越火了,随便电视上.网络上.商场里,到处都是二维码.而内嵌二维码扫描功能的软件也越来越多,QQ.微信.UC浏览器等等应用都可以对着二维码扫一扫,感觉我们自己的应用里不加上二维码扫描功能,都跟不上时代潮流了.所以今天我就将带着大家一起,在我们自己的程序里加入二维码扫描的功能. 不过,二维码功能如果真要做起来还是非常复杂的,从零开始实现不太现实,比较好的

微信扫描二维码登录网站技术原理

微信扫描二维码登录网站 网站应用微信登录开发指南 微信扫描二维码登录网站是微信开放平台下网站应用的一种接口实现的功能.微信开放平台的网址是 https://open.weixin.qq.com 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接

iOS中 扫描二维码/生成二维码详解 韩俊强的博客

最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang  新浪微博 指示根视图: self.window.rootViewController = [[UINavigationController alloc]initWithRootViewController:[SecondViewController new]]; 每日更新关注:http://weibo.com/hanjunqi

在iOS中使用ZBar扫描二维码

最近在做的项目中需要用到二维码扫描功能,之前在Android中使用过ZXing识别二维码,ZXing也有对应的iOS版本,经过了解,ZBar也是一个常用的二维码识别软件,并分别提供了iOS和Android的SDK可供使用,最终我选择了ZBar进行二维码识别,它的注释清晰,便于使用. ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面,另一种方式是使用ZBar提供的可以嵌在其他视图中的ZBarReaderView,实际项目