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 ...
随机推荐
- 解决DLNA方案的技术框架
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00000950 Http协议 1.NanoHTTPD是一 ...
- Lucene系列五:Lucene索引详解(IndexWriter详解、Document详解、索引更新)
一.IndexWriter详解 问题1:索引创建过程完成什么事? 分词.存储到反向索引中 1. 回顾Lucene架构图: 介绍我们编写的应用程序要完成数据的收集,再将数据以document的形式用lu ...
- perl学习-运算符添加引号
这个比较有意思,在其它语言中好像没有特别提到 Perl 引号运算符如下表所示. 运算符描述实例 q{ }为字符串添加单引号q{abcd} 结果为 'abcd' qq{ }为字符串添加双引号qq{abc ...
- 在Eclipse中设置进行JNI的头文件编译方法(转 http://blog.csdn.net/mirkerson/article/details/17187109)
这两天在搞NDK开发,JNI的头文件进行编译的时候,要跑到对应的class文件路径下(通常是工程的bin目录),进行编译生成,很是不便,也容易出错,所以考虑在Eclipse中作为外部工具引入,所以便查 ...
- ibatis中的安全问题
http://blog.csdn.net/yangqillohe/article/details/4139265
- Activiti5小试牛刀demo流程
demo流程目标:刚接触Activiti5,先大致了解下Activiti5的架构,熟悉下开发流程 搭建开发环境 首先给MyEclipse安装Activiti Designer插件,下载网址http:/ ...
- CentOS6.8下安装MySQL5.6
一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...
- js以类似jquery的模式绑定事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CentOS 7下彻底卸载MySQL数据库
转载: https://zhangzifan.com/centos-7-remove-mysql.html
- Apache TomEE 入门指南
介绍 Apache TomEE(发音同“tommy”)是一个新的JavaEE服务器,由Apache软件基金会开发,你大概能够从它的名字猜到,它是从Tomcat而来, 同时加入的JavaEE的特征:To ...