二维码扫描

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开发之二维码扫描的更多相关文章

  1. iOS开发技术 - 二维码扫描、生成

    QRecLevel:QR_ECLEVEL_H // 二维码容错率,最高为30%(即QR_ECLEVEL_H),即LOGO有大                                       ...

  2. iOS学习——iOS原生实现二维码扫描

    最近项目上需要开发扫描二维码进行签到的功能,主要用于开会签到的场景,所以为了避免作弊,我们再开发时只采用直接扫描的方式,并且要屏蔽从相册读取图片,此外还在二维码扫描成功签到时后台会自动上传用户的当前地 ...

  3. iOS:原生二维码扫描

    做iOS的二维码扫描,有两个第三方库可以选择,ZBar和ZXing.今天要介绍的是iOS7.0后AVFoundation框架提供的原生二维码扫描. 首先需要添加AVFoundation.framewo ...

  4. iOS 自带二维码扫描功能的实现

    自从iOS7以后中新增了二维码扫描功能.因此可以在不借助第三方类库的情况下简单的写出二维码的扫描功能: 原生的二维码扫描功能在AVFoundation框架下,所以在使用原生的二维码扫描功能时要先导入A ...

  5. iOS学习之二维码扫描

    这几天刚好将本人高仿新浪微博的事情进行一个阶段性的tag,在此也将这个项目在实现二维码扫描这个功能来做一个简要的记录.关于高仿新浪微博的源代码,本人已经将全部代码托管到github,地址在这里.欢迎大 ...

  6. iOS开发——生成二维码——工具类

    啥也不说,直接上源码,拷过去就能用.生成二维码的工具类使用方法在ProduceQRCode.h里有示例说明 分别将下面的ProduceQRCode.h和ProduceQRCode.m对应的代码考到自己 ...

  7. iOS端使用二维码扫描(ZBarSDK)和生成(libqrencode)功能

    如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影.手机中二维码使用也很广泛,如微信等.正好最近收集总结了下二维码的使用方法 下面介绍一下如何在iOS设备上使用二维码 首先在githu ...

  8. iOS开发-二维码

    二维码 从ios7开始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤: 倒入CoreImage框架 通过滤镜CIFilter生成二维码 二维码的内 ...

  9. bug: 使用 iOS 系统方法进行二维码扫描,扫描区域的问题

    项目里用到了扫描,出现了bug:感觉就是把二维码正好框在扫描框里扫不出来,然后把镜头离二维码拉远,扫描速度很慢,但是能扫描出来.网上找了下代码,发现也没啥哪里不一样,感觉很坑啊,后面发现不设置 AVC ...

随机推荐

  1. UVA - 10298 Power Strings (KMP求字符串循环节)

    Description Problem D: Power Strings Given two strings a and b we define a*b to be their concatenati ...

  2. ios中自定义button

    自定义button #import <UIKit/UIKit.h> #define KFont 15 @interface DIYButton : UIButton @property(n ...

  3. 【转】centos(原生yum系通用)安装xfce便捷方法

    一个鸟人突然来了句他要在centos 5.2上装xfce,yum install xfce和yum install xfce4均没有合适的包(服务器没装x环境)于是我ssh登录到服务器上看了下,的确没 ...

  4. html锚点定位不准确问题

    问题描述 当顶部固定时,点击锚点,会跳转到锚点以下. <style> #one,#two,#three{ height: 500px; } #top{ position: fixed; h ...

  5. 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得

    谈谈技术原则,技术学习方法,代码阅读及其它(正文) 这篇文章是前一阵在水木BBS上和别人讨论中偶自己发言的摘编,是偶这几年开发过程完全经验式的总结.完全个人经验,供批判. 一.选用技术的原则 比较规范 ...

  6. ubuntu远程桌面连接windows系统

    现在用ubuntu系统,公司买了个windows的服务器,需要给配置一套环境,来回跑很麻烦,就想windows下可以的远程桌面,Linux应该也有. 现在自己的ubuntu13.10,无法进入桌面的“ ...

  7. 颜色传感器TCS230及颜色识别电路(转)

    摘要 TCS230是美国TAOS公司生产的一种可编程彩色光到频率的传感器.该传感器具有分辨率高.可编程的颜色选择与输出定标.单电源供电等特点:输出为数字量,可直接与微处理器连接.文中主要介绍TCS23 ...

  8. Ubuntu中安装配置和卸载FTP(转)

    转载:http://zyjustin9.iteye.com/blog/2178943 一.安装1.用apt-get工具安装vsftpd: $ sudo apt-get install vsftpd 2 ...

  9. permission denied (publickey)问题的解决 和 向github添加ssh key

    使用ssh key这种方式进行clone ,pull github上面的项目,使用 git clone或者git pull origin master出现permission denied (publ ...

  10. dubbo 学习(5) dubbo多协议和多注册中心

    转载 http://blog.csdn.net/songjinbin/article/details/49498431 一.配置dubbo多协议模式 1.默认协议 Dubbo缺省协议采用单一长连接和N ...