iOS开发之二维码扫描
二维码扫描
01-导入系统库

02 新建继承自UIView的
LHQPreView
2.1导入系统库头文件
#import <AVFoundation/AVFoundation.h>
2.2声明所需要的属性
@property(nonatomic,strong)UIImageView *imageView;
@property(nonatomic,strong)UIImageView *lineImageView;
@property(nonatomic,strong)NSTimer *timer;
@property(nonatomic,strong)AVCaptureSession *session;
2.3返回layer的类型
//可以展示输入设备展示的信息
+(Class)layerClass{
return [AVCaptureVideoPreviewLayer class];
}
2.4 设置特殊的layer
- (void)setSession:(AVCaptureSession *)session{
_session = session;
AVCaptureVideoPreviewLayer *layer = (AVCaptureVideoPreviewLayer *)self.layer;
layer.session = session;
}
2.5 初始化调用方法实现layer上展示扫描横线的动画
- (instancetype)initWithFrame:(CGRect)frame{
if(self = [super initWithFrame:frame]){
[self initUiConfig];
}
return self;
}
- (void)initUiConfig
{
//设置背景图片
_imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pick_bg.png"]];
//设置位置到界面的中间
_imageView.frame = CGRectMake(self.bounds.size.width * 0.5 - 140, self.bounds.size.height * 0.5 - 140, 280, 280);
//添加到视图上
[self addSubview:_imageView];
//初始化二维码的扫描线的位置
_lineImageView = [[UIImageView alloc] initWithFrame:CGRectMake(30, 10, 220, 2)];
_lineImageView.image = [UIImage imageNamed:@"line.png"];
[_imageView addSubview:_lineImageView];
//开启定时器
_timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(animation) userInfo:nil repeats:YES];
}
- (void)animation
{
[UIView animateWithDuration:2.8 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
_lineImageView.frame = CGRectMake(30, 260, 220, 2);
} completion:^(BOOL finished) {
_lineImageView.frame = CGRectMake(30, 10, 220, 2);
}];
}
3 主控制器
3.1导入系统库头文件
#import <AVFoundation/AVFoundation.h>
3.2导入特殊layer的View
LHQPreView.h
3.3定义所需要的属性
//3.3.1. 输入设备(从外界采集信息)
//输入设备有很多种 摄像头 麦克风 键盘
@property(nonatomic,strong)AVCaptureDeviceInput *input;
//3.3.2.输出设备(解析采集来的内容 然后获取数据)Metadata 元数据
@property(nonatomic,strong)AVCaptureMetadataOutput *output;
//3.3.3.会话 session(连接输入和输出进行工作)
@property(nonatomic,strong)AVCaptureSession *session;
//3.3.4 layer 特殊的layer(展示输入设备采集到的信息)
@property(nonatomic,strong)LHQPreView *preView;
3.4 二维码扫描四个步骤
3.4.1
//1.摄像头 输入设备(从外界采集信息)
//创建具体的设备
//AVMediaTypeAudio 麦克风
//AVMediaTypeVideo 摄像头
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
_input = [AVCaptureDeviceInput deviceInputWithDevice:device error:NULL];
3.4.2
//2.输出设备(解析采集来的内容 然后获取数据)
_output = [[AVCaptureMetadataOutput alloc]init];
3.4.3
//3.会话 session(连接输入和输出进行工作)
_session = [[AVCaptureSession alloc]init];
// 会话展示的大小
[_session setSessionPreset:AVCaptureSessionPresetHigh];
//添加输入设备和输出设备
if([_session canAddInput:_input]){
[_session addInput:_input];
}
if([_session canAddOutput:_output]){
[_session addOutput:_output];
}
//指定输出设备的代理 来返回解析到的数据
// 把网址展示,并且跳转做相关的操作
[_output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//设置元数据类型
//AVMetadataObjectTypeQRCode 二维码类型
[_output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
3.4.5
//4 layer 特殊的layer(展示输入设备采集到的信息)
// _previewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:_session];
// //daxiao
// self.previewLayer.frame = self.view.bounds;
// //
// [self.view.layer addSublayer:self.previewLayer];
//创建一个特殊视图,用来展示二维码界面
LHQPreView *preView = [[LHQPreView alloc]initWithFrame:self.view.bounds];
[self.view addSubview:preView];
preView.session = _session;
3.4.6
//5 开启会话
[self.session startRunning];
3.4.7实现代理方法,打印出扫描的结果
/*
captureOutput 输出
metadataObjects 元数据数组
connection 连接
*/
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
//停止会话
[_session stopRunning];
//移除labyer
[self.preView removeFromSuperview];
for(AVMetadataMachineReadableCodeObject *objc in metadataObjects){
// NSLog(@"%@",[objc class]);
//AVMetadataMachineReadableCodeObject
NSLog(@"%@",objc.stringValue);
}
}

iOS开发之二维码扫描的更多相关文章
- iOS开发技术 - 二维码扫描、生成
QRecLevel:QR_ECLEVEL_H // 二维码容错率,最高为30%(即QR_ECLEVEL_H),即LOGO有大 ...
- iOS学习——iOS原生实现二维码扫描
最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时后台会自动上传用户的当前地 ...
- iOS:原生二维码扫描
做iOS的二维码扫描,有两个第三方库可以选择,ZBar和ZXing.今天要介绍的是iOS7.0后AVFoundation框架提供的原生二维码扫描. 首先需要添加AVFoundation.framewo ...
- iOS 自带二维码扫描功能的实现
自从iOS7以后中新增了二维码扫描功能.因此可以在不借助第三方类库的情况下简单的写出二维码的扫描功能: 原生的二维码扫描功能在AVFoundation框架下,所以在使用原生的二维码扫描功能时要先导入A ...
- iOS学习之二维码扫描
这几天刚好将本人高仿新浪微博的事情进行一个阶段性的tag,在此也将这个项目在实现二维码扫描这个功能来做一个简要的记录.关于高仿新浪微博的源代码,本人已经将全部代码托管到github,地址在这里.欢迎大 ...
- iOS开发——生成二维码——工具类
啥也不说,直接上源码,拷过去就能用.生成二维码的工具类使用方法在ProduceQRCode.h里有示例说明 分别将下面的ProduceQRCode.h和ProduceQRCode.m对应的代码考到自己 ...
- iOS端使用二维码扫描(ZBarSDK)和生成(libqrencode)功能
如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影.手机中二维码使用也很广泛,如微信等.正好最近收集总结了下二维码的使用方法 下面介绍一下如何在iOS设备上使用二维码 首先在githu ...
- iOS开发-二维码
二维码 从ios7开始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤: 倒入CoreImage框架 通过滤镜CIFilter生成二维码 二维码的内 ...
- bug: 使用 iOS 系统方法进行二维码扫描,扫描区域的问题
项目里用到了扫描,出现了bug:感觉就是把二维码正好框在扫描框里扫不出来,然后把镜头离二维码拉远,扫描速度很慢,但是能扫描出来.网上找了下代码,发现也没啥哪里不一样,感觉很坑啊,后面发现不设置 AVC ...
随机推荐
- MySQL与OLAP:分析型SQL查询最佳实践探索
搞点多维分析,糙快猛的解决方式就是使用ROLAP(关系型OLAP)了.数据经维度建模后存储在MySQL,ROLAP引擎(比方开源的Mondrian)负责将OLAP请求转化为SQL语句提交给数据库.OL ...
- 【图像处理】openCV光流法追踪运动物体
openCV光流法追踪运动物体 email:chentravelling@163.com 一.光流简单介绍 摘自:zouxy09 光流的概念是Gibson在1950年首先提出来的.它是空间运动物体在观 ...
- 基于swagger进行接口文档的编写
0. 前言 近期忙于和各个银行的代收接口联调,根据遇到的问题,对之前编写的接口进行了修改,需求收集和设计接口时想到了方方面面,生产环境下还是会遇到意想不到的问题,好在基本的执行逻辑已确定,因此只是对接 ...
- 阿里云ECS 利用快照创建磁盘实现无损扩容数据盘
在扩容数据盘时,若遇到磁盘原因导致无法无损的扩容时,可以临时购买一块独立云磁盘来存放数据,然后将数据盘彻底格式化来解决,以下是操作步骤: 1. 首先基于当前数据盘创建一个快照,备份数据,同时可以利用 ...
- (原)torch模型转pytorch模型
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7839263.html 目前使用的torch模型转pytorch模型的程序为: https://gith ...
- Swift3 - compare方法之ComparisonResult说明
Swift3在实现两个对象比较时,引入了compare方法,其中,方法返回值ComparisonResult解释如下: ComparisonResult是一个枚举类型,包含了以下3个成员: 其中: q ...
- 从html加载json文件想起
原文来自:https://www.cnblogs.com/dibaosong/p/4572274.html#top 文中给出了data.json文件内容 还给出了html文件内容 ok. 1.新建工程 ...
- [抄]使用网页进行展示而非PPT
会议.演讲离不开幻灯片,它可以有效地辅助演讲者进行表达.目前一些流行的工具,比如Windows平台上的PowerPoint.Mac平台上的Keynote等工具,使得幻灯片的制作变得简单.但是这些幻灯片 ...
- Redability
在写爬虫进行舆情分析.情感分析等内容时,我们经常爬取博客.新闻等长篇大论的文章,在一个网页上,根据网页布局,人眼可以很明确的确定哪些元素是文章主体.人眼既然能够识别,那么机器必然也是能够识别的.如果给 ...
- [解决问题]selenium.remote.UnreachableBrowserException 异常分析并解决问题
I have a set of automations that work fantastically in Firefox and Chrome, and I'd like to launch an ...