iOS--二维码
现在很多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--二维码的更多相关文章
- Ios二维码扫描(系统自带的二维码扫描)
Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...
- iOS二维码扫描IOS7系统实现
扫描相关类 二维码扫描需要获取摄像头并读取照片信息,因此我们需要导入系统的AVFoundation框架,创建视频会话.我们需要用到一下几个类: AVCaptureSession 会话对象.此类作为硬件 ...
- iOS - 二维码扫描和应用跳转
序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦, ...
- iOS二维码生成与识别
在 IOS7 以前,在IOS中实现二维码和条形码扫描,有两大开源组件 ZBar 与 ZXing. 总结下各自的缺点: ZBar在扫描的灵敏度上,和内存的使用上相对于ZXing上都是较优的,但是对于 & ...
- iOS 二维码 学习
这段时间忙着交接工作,找工作,找房子,入职,杂七杂八的,差不多一个月没有静下来学习了.这周末晚上等外卖的时间学习一下二维码的制作与扫描. 项目采用OC语言,只要使用iOS自带的CoreImage框架, ...
- iOS二维码、条形码生成(可指定大小、颜色)
一.前言: iOS7.0之后可以利用系统原生 API 生成二维码, iOS8.0之后可以生成条形码, 系统默认生成的颜色是黑色. 在这里, 利用以下方法可以生成指定大小.指定颜色的二维码和条形码, 还 ...
- iOS:二维码的生成
所谓的二维码就是一个图片,只不过在iOS需要借用<CoreImage/CoreImage.h>来实现, 并且二维码图片是通过CIImage来转成UIImage的.具体步骤如下: // 1 ...
- iOS 二维码的生成 QREncoder
生成二维码: 在生成二维码的库中QREncoder最为常见,但是由于中文字符的特殊性,生成中文的时候有时会出现一定的错误,所以建议使用libqrencode,是一个纯C编写的类库. 以libqrenc ...
- iOS二维码生成、识别、扫描等
二维码扫描 前言: 最近的项目中使用到了二维码,二维码这个模块功能也完成:觉得还是有必要总结一下用来做记录.好长时间没有写二维码了都忘记在差不多了,重新拾起来还是挻快的. 二维码使用场景: 生活中有很 ...
- iOS二维码生成-libqrencode编译报错
libqrencode使用 1.将libqrencode文件夹整个拖入项目文件夹中 2.在要生成二维码的页面的 .m文件头部添加 #import "QRCodeGenerator.h&quo ...
随机推荐
- Method not found : Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)
找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean) ...
- maven工程pom.xml文件解读
maven的核心是pom.xml,POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述如何构建,声明项目依赖.以Hello World项目为例,创建一个hel ...
- 60行以内写mvc
标题党.几天前看到一个30行写mvc的文章,东施效颦,也动手写了个60行的,功能上略微扩充一些,记录下来,后面有时间可以继续优化. mvc其实是一个观察者模式.view来监听model,所以当mode ...
- 天气预报API(六):中国气象频道、腾讯天气--“新编码”接口的测试
说明 本文所有测试均以青岛为例. 本文所列接口城市代码(cityid)参数都使用的 "新编码": 全国城市代码列表(新) 本文接口均不是官方接口,仅供测试使用! 腾讯天气 空气质量 ...
- (转)详解Linux Top 命令
top 命令是最流行的性能监视工具之一,我们必需了解.它是一个优秀的交互式工具,用于监视性能.它提供系统整体性能,但报告进程信息才是 top 命令的长处.top 命令交互界面如下图所视:
- 异或链表(XOR linked list)
异或链表(Xor Linked List)也是一种链式存储结构,它可以降低空间复杂度达到和双向链表一样目的,任何一个节点可以方便的访问它的前驱节点和后继结点.可以参阅wiki 普通的双向链表 clas ...
- To Use FTP Command in Linux
Yesterday I was asked to upload a file in Linux to the corresponding server. I said "oops" ...
- MFC 关于如何实现浏览文件
在做界面的时候,如果涉及到文件,就要输入文件的地址 第一种方法是直接输入,嗯...╮( ̄▽ ̄)╭ 第二种方法就是常见的浏览,然后选择文件<( ̄︶ ̄)/ 其代码如下: CString filena ...
- [转]Java学习日记之 volatile
用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...
- php模拟登陆的两种实现方法分析
php模拟登陆的实现方法分析 本文实例分析了php模拟登陆的实现方法.分享给大家供大家参考.具体分析如下: php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网.具体实例代码如下: 1)使 ...