iOS开发——iOS7(及以后版本) SDK自带二维码(含条形码)扫码、二维码生成
本文转载至 http://www.cnblogs.com/leotangcn/p/4357907.html
现在很多APP都涉及了二维码扫码功能,这个功能简单实用,很多情况下用户乐于使用,现在本文带来iOS7自带二维码扫码的教程,也包括扫条形码,足以满足简单的扫码要求,而且避免使用第三方的繁琐。
后期项目中需要生成二维码,我在git上找到一个很方便使用的轻量级开源库,推荐给有需要的朋友:https://github.com/moqod/ios-qr-code-encoder
下面介绍如何使用iOS7后SDK自带扫码API。
首先,要引入AVFoundation框架:
1 #import <AVFoundation/AVFoundation.h>
然后完成扫码需要用的相关类的对象:
1 @property (strong,nonatomic)AVCaptureDevice *device;
2 @property (strong,nonatomic)AVCaptureDeviceInput *input;
3 @property (strong,nonatomic)AVCaptureMetadataOutput *output;
4 @property (strong,nonatomic)AVCaptureSession *session;
5 @property (strong,nonatomic)AVCaptureVideoPreviewLayer *previewLayer;
初始化:

1 // Device
2 _device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
3 // Input
4 NSError *error = nil;
5 _input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:&error];
6 if (error) {
7 NSLog(@"初始化输入设备失败");
8 }
9 // Output
10 _output = [[AVCaptureMetadataOutput alloc] init];
11 [_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
12 // Session
13 _session = [[AVCaptureSession alloc] init];
14 [_session setSessionPreset:AVCaptureSessionPresetHigh];
15 // 添加输入输出
16 if ([_session canAddInput:self.input])
17 {
18 [_session addInput:self.input];
19 }
20 if ([_session canAddOutput:self.output])
21 {
22 [_session addOutput:self.output];
23 }
24 // 条码类型 AVMetadataObjectTypeQRCode 即二维码,如果需要扫描条形码,就要在这个数组里添加枚举,command点二维码枚举进去,就会看见其他的需要的条码类型,例如UPC,code39,code128等,酌情使用
25 _output.metadataObjectTypes =@[AVMetadataObjectTypeQRCode];
26
27 // Preview
28 _previewLayer =[AVCaptureVideoPreviewLayer layerWithSession:self.session];
29 _previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
30 _previewLayer.frame = self.view.bounds;
31 [self.view.layer insertSublayer:self.previewLayer atIndex:0];
32 // 开始扫码
33 [_session startRunning];

实现代理AVCaptureMetadataOutputObjectsDelegate:

1 #pragma mark - AVCaptureMetadataOutputObjectsDelegate methods
2 // 扫到码之后,会通过这个代理方法告知扫码结果
3 - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection {
4
5 NSString *stringValue = nil;
6 if ([metadataObjects count] >0)
7 {
8 AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex:0];
9 stringValue = metadataObject.stringValue;
10 }
11 // 扫码成功,停止扫码会话层活动
12 [_session stopRunning];
13
14 NSLog(@"%@",stringValue);
15 }

以上就iOS7以后SDK原生扫码,使用比较简单。
iOS开发——iOS7(及以后版本) SDK自带二维码(含条形码)扫码、二维码生成的更多相关文章
- 李洪强iOS开发之-环信02_iOS SDK 介绍及导入
李洪强iOS开发之-环信02_iOS SDK 介绍及导入 iOS SDK 介绍及导入 iOS SDK 介绍 环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架.包括以下几个部分: SD ...
- 李洪强iOS开发之-环信01_iOS SDK 前的准备工作
李洪强iOS开发之-环信01_iOS SDK 前的准备工作 1.1_注册环信开发者账号并创建后台应用 详细步骤: 注册并创建应用 注册环信开发者账号 第 1 步:在环信官网上点击“即时通讯云”,并点 ...
- iOS开发中的系统版本比较
由于系统平台和SDK更新迭代,一部分过时的成员.方法会被彻底从SDK中移除,为了兼容旧的设备,这时就需要区分系统平台版本调用正确的API. 另一种情况是iOS设备的屏幕和设备参数不同,虽然UI上的Au ...
- iOS开发之判断系统版本
if([[UIDevice currentDevice].systemVersion doubleValue]>=7.0) { //是IOS7至以上版本 }else{ //IOS7以下版本 }
- iOS开发之 在release版本禁止输出NSLog内容
因为NSLog的输出还是比较消耗系统资源的,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉. 我们可以在发布版本前先把所有NSLog语句注释掉,等以后要调试时 ...
- iOS开发之引用百度地图SDK(一)-----------SDK开发指南
(void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用 ...
- iOS开发 判断当前APP版本和升级
从iOS8系统开始,用户可以在设置里面设置在WiFi环境下,自动更新安装的App.此功能大大方便了用户,但是一些用户没有开启此项功能,因此还是需要在程序里面提示用户的 方法一:在服务器接口约定对应的数 ...
- IOS开发 ios7适配
ios7控制器试图默认为全屏显示,导航栏的不同设置会产生不同的效果. 首先判断系统的的版本,区别: if (floor(NSFoundationVersionNumber) <= NSFound ...
- iOS开发-iOS7禁用手势返回
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 禁用 iOS7 返回手势 if ([self.nav ...
随机推荐
- c++ 文件增加#ifndef、#define 和 #endif 语句的意义
文件currency.h (或 currencyOverload.h) 包含了 currency类的声明和实现细节. 在文件头, 应该加上语句 #ifndef Currency_ #define Cu ...
- [转]8款实用的jQuery/CSS3最新插件应用
今天给大家分享8款非常酷的最新jQuery/CSS3应用插件,废话少说,下面一起来看看这些插件吧. 1.HTML5重力感应积木游戏 这也是一款基于HTML5技术的重力感应游戏,一些积木从天而降,你可以 ...
- java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
hibernate查询结果条数集 原写法: Integer count = (Integer )session.createQuery(hql).uniqueResult(); 报错:java.lan ...
- php 序列化与反序列化
<?php //声明一个类 class dog { var $name; var $age; var $owner; function dog($in_name=",$in_owner ...
- php后台管理员权限相关表结构
admin管理员表 id int(11) 用户id username varchar(128) 用户名 password varchar(128) 管理员密码 name varchar(50) 管理员 ...
- Erlang编程语言的一些痛点
Erlang编程语言的一些痛点 http://www.zhihu.com/question/34500981
- 关于HTTP Message
HTTP Message包括JS, HTML等Resource.这些都是相对来说有代码可以写的东西,但是原理的东西是没有代码的.coding只是很少的一部分工作内容. Browser的流程.比如con ...
- 【WP8】为Webbrowser添加ScrollBar
在WP8中,控件WebBrowser没有提供对滚动条的支持,而在内置的IE中,却可以显示出滚动条(微软这是在坑我们吗),但如果在客户端使用Webbrowser的话,自己构造ScrollBar来显示 通 ...
- Node.js静态文件服务器实战[转]
p.s. 在下面这篇文章的指导下,做了一个静态文件服务器,见:https://github.com/walkerwzy/node_static_server ==== 这是一篇阐述得比较详细的文章,从 ...
- hibernate validate
http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/ --hibernate validate htt ...