菜鸟成长记-二维码生成、扫描
2016-04-08 10:50
211 查看
项目中经常会有生成二维码的需求,其实做起来还是很简单的,只需求照几步走就行
每一步的作用,我都会有注释,学习起来很方便1:生成二维码
//
实例化二维码滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
//
将字符串转换成NSdata
NSData *data = [@"http://www.baidu.com" dataUsingEncoding:NSUTF8StringEncoding];
//
通过KVO设置滤镜,
传入data,
[filter setValue:data forKey:@"inputMessage"];
//
生成二维码
CIImage *outputImage = [filter outputImage];
UIImage *image = [UIImage imageWithCIImage:outputImage];
//
设置生成好得二维码到imageview上
self.myImage.image = image;
2:扫描二维码
// 1. 实例化拍摄设备
AVCaptureDevice *device = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo];
// 2.
设置输入设备
AVCaptureDeviceInput *input = [AVCaptureDeviceInput
deviceInputWithDevice:device error:nil];
// 3.
设置元数据输出
// 3.1
实例化拍摄元数据输出
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput
alloc] init];
// 3.3
设置输出数据代理
[output setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];
// 4.
添加拍摄会话
// 4.1
实例化拍摄会话
AVCaptureSession *session = [[AVCaptureSession
alloc] init];
// 4.2
添加会话输入
[session addInput:input];
// 4.3
添加会话输出
[session addOutput:output];
// 4.3 设置输出数据类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
self.session = session;
// 5.
视频预览图层
// 5.1 实例化预览图层,
传递_session是为了告诉图层将来显示什么内容
AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer
layerWithSession:_session];
preview.videoGravity =
AVLayerVideoGravityResizeAspectFill;
preview.frame =
self.view.bounds;
// 5.2
将图层插入当前视图
[self.view.layer
insertSublayer:preview atIndex:100];
self.VideoLayer = preview;
// 6.
启动会话
[_session
startRunning];
3:实现协议方法
#pragma mark AVCaptureMetadataOutputObjectsDelegate
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection
*)connection
{
// 会频繁的扫描,调用代理方法
// 如果扫描完成,停止会话
[self.session
stopRunning];
//
删除预览图层
[self.VideoLayer
removeFromSuperlayer];
NSLog(@"%@", metadataObjects);
// 设置界面显示扫描结果
if (metadataObjects.count > 0) {
AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];
// 提示:如果需要对url或者名片等信息进行扫描,可以在此进行扩展!
NSLog(@"%@", obj.stringValue);
}
}
相关文章推荐
- A Crash Course on the Depths of Win32™ Structured Exception Handling
- 分治法
- 设备横竖屏切换的时候,接下来会发生什么?
- 关于adb的一些命令
- 使用xml序列化器保存数据
- 【Chromium中文文档】安全浏览--Chrome中的警告都是怎么来的?
- 安装ipa
- Linux pwd --显示当前工作目录
- python3.5变化(String)
- adb连接安卓设备失败failed to start daemon
- leetcode - Lowest Common Ancestor of a Binary Tree
- UITabView使用详解
- Python3.5.1 下使用HTMLParser报错
- SQL加权限
- C++第二次实验_作业(4个源代码)
- 腾讯2016实习生笔试题 获得最长回文串长度
- android AsyncTask介绍
- 课前预习该怎么用iMindMap来做
- SWUST OJ 1804 二进制
- Linux pstree --以树状图显示进程间的关系