ios二维码扫描
1.添加AVFoundation.framework框架
2,控制器中实现
//第一步添加AVFoundation.framework框架
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import "RYPreView.h"
@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
//定义输入设备,用户采集信息,
@property(nonatomic,strong)AVCaptureDeviceInput*input;
//定义输出设备,处理采集的信息,获得数据
@property(nonatomic,strong)AVCaptureMetadataOutput*outPut;
//定义连接输入输出设备的会话
@property(nonatomic,strong)AVCaptureSession*session;
//定义展示信息的图层
@property(nonatomic,strong)RYPreView*preview;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//1,定义输入设备,摄像头
AVCaptureDevice *device=[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
self.input=[AVCaptureDeviceInput deviceInputWithDevice:device error:NULL];
//2.输出设备
self.outPut=[[AVCaptureMetadataOutput alloc]init];
//3.定义session会话
self.session=[[AVCaptureSession alloc]init];
//展示大小
[self.session setSessionPreset:AVCaptureSessionPreset640x480];
//添加输入输出设备
if([self.session canAddInput:self.input])
{
[self.session addInput:self.input];
}
if ([self.session canAddOutput:self.outPut]) {
[self.session addOutput:self.outPut];
}
//指定输出设备代理
[self.outPut setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//设置元数据类型 二维码
[self.outPut setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
//需要一个特殊的layer来处理展示的数据 AVCaptureVideoPreviewLayer
//方法一可以再这里创建并设置大小
//方法二
RYPreView *preview=[[RYPreView alloc]initWithFrame:self.view.bounds];
preview.session=self.session;
[self.view addSubview:preview];
//开启会话
[self.session startRunning];
}
//解析元数据调用
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
//停止会话
[self.session stopRunning];
//移除视图layer
[self.preview removeFromSuperview];
//获取信息
for (AVMetadataMachineReadableCodeObject* objc in metadataObjects) {
NSLog(@"%@",objc.stringValue);
}
}
@end
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface RYPreView : UIView
//定义session,实现session与当前layer绑定
@property(nonatomic,strong)AVCaptureSession*session;
@end
#import "RYPreView.h"
@interface RYPreView()
@property(nonatomic,strong)UIImageView*imageCover;
@property(nonatomic,strong)UIImageView*lineImage;//
@property(nonatomic,strong)NSTimer*timer;//动画时间间距
@end
@implementation RYPreView
//自定义需要layer的类型 session 需要绑定的layer类型为AVCaptureVideoPreviewLayer
+(Class)layerClass
{
return [AVCaptureVideoPreviewLayer class];
}
//重写set方法
-(void)setSession:(AVCaptureSession *)session
{
_session=session;
AVCaptureVideoPreviewLayer *layer=(AVCaptureVideoPreviewLayer*)self.layer;
layer.session=session;
}
-(instancetype)initWithFrame:(CGRect)frame
{
if (self=[super initWithFrame:frame]) {
[self addSubviewWithFrame];
}
return self;
}
//初始化自定义控件
-(void)addSubviewWithFrame
{
//设置背景图片
self.imageCover = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pick_bg.png"]];
//设置位置到界面的中间
self.imageCover.frame = CGRectMake(self.bounds.size.width * 0.5 - 140, self.bounds.size.height * 0.5 - 140, 280, 280);
//添加到视图上
[self addSubview:self.imageCover];
//初始化二维码的扫描线的位置
self.lineImage = [[UIImageView alloc] initWithFrame:CGRectMake(30, 10, 220, 2)];
self.lineImage.image = [UIImage imageNamed:@"line.png"];
[self.imageCover addSubview:self.lineImage];
//开启定时器
_timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(animation) userInfo:nil repeats:YES];
}
- (void)animation
{
[UIView animateWithDuration:2.8 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
self.lineImage.frame = CGRectMake(30, 260, 220, 2);
} completion:^(BOOL finished) {
self.lineImage.frame = CGRectMake(30, 10, 220, 2);
}];
}
@end
ios二维码扫描的更多相关文章
- Ios二维码扫描(系统自带的二维码扫描)
Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...
- iOS二维码扫描IOS7系统实现
扫描相关类 二维码扫描需要获取摄像头并读取照片信息,因此我们需要导入系统的AVFoundation框架,创建视频会话.我们需要用到一下几个类: AVCaptureSession 会话对象.此类作为硬件 ...
- iOS - 二维码扫描和应用跳转
序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦, ...
- ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。
二维码介绍: 二维码(QR(Quick Response)code),又称二维条码,最早起源于日本. 它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息 ...
- iOS二维码扫描的实现(Swift)
随着二维码的普遍使用,二维码扫描也成为了很多app的一个基本功能,本篇主要来介绍一下如何实现一个简单的二维码扫描功能.本文使用了XCode自带的AVFoundation 库,利用Swfit语言实现. ...
- iOS 二维码扫描 通过ZBar ZXing等第三方库
扫描二维码的开源库有很多如 ZBar.ZXing等 ZBar的使用方法: 下载ZBar SDK 地址https://github.com/bmorton/ZBarSDK ZBarSDK是一个开源的SD ...
- iOS 二维码扫描
// 导入 AVFoundation.framwork 框架#import "HDCodeViewController.h" #import "HDNormalViewC ...
- 有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)
今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功 ...
- iOS开发-二维码扫描和应用跳转
iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...
随机推荐
- Shell 语法 if 、 case 、for 、 while、 until 、select 、repeat、子函数
if语法 : if [ expression ] then commandselif [ expression2 ] then commandselse commandsfi ...
- ios bitcode 机制对 dsym 调试文件的影响
今天想试试用dsym和crash文件跟踪crash信息,可是一直返回如下信息: Thread name: Dispatch queue: com.apple.main-thread Thread Cr ...
- java一维数组
1.通过数组名进行赋值,其实质是引用 比如数组array1和数组array2 若执行array2=array1,实际上将array1的引用传递给array2,array1和array2 最后都指向同一 ...
- KV6.60 SP1
组态王6.60 SP1全新发布! 组态王6.60 SP1对过去几年6系列中已解决过的故障进行了合并,包括各主线分支.各OEM版本中的故障总计122个,覆盖运行系统.开发系统.历史趋势曲线控件.报表.A ...
- 利用冒泡对List排序
SysMenu是List集合中的类型,在这是一个菜单实体. public List<SysMenu> selfMenuSort(List<SysMenu> list) { fo ...
- ListView之BaseAdapter的使用
话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gal ...
- Excel计算一列的和sum(A:A)
在公式中输入=sum(A2:A6),计算的是A列2-6行的和 =sum(A:A)计算的是A列全部的和
- [Android Pro] Android性能优化典范第一季
reference to : http://www.cnblogs.com/hanyonglu/p/4244035.html#undefined 2015年伊始,Google发布了关于Android性 ...
- Python--常见问题解决方案
1.如何支持中文,在第一行加上编码格式的支持: # coding=gbk +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- Sightseeing(poj 3463)
题意:给出n个点m条单向边,求最短路的道路条数和比最短路大1的道路条数的和. /* 用Dijkstra更新2*n次,来更新出所有点的最短路和次短路,顺便更新方案数. */ #include<cs ...