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 ...
随机推荐
- C++基础知识面试精选100题系列(21-30)[C++ basics]
[本文链接] http://www.cnblogs.com/hellogiser/p/100-interview-questions-of-cplusplus-basics-21-30.html [题 ...
- ios中的RunLoop 和 android 中的Looper
今天写android程序,用到了Handler,晚上回来查阅资料,发现了Looper这个概念. 看了一下网上关于Looper的资料,发现这个Looper跟ios中的Runloop基本的理念完全一致! ...
- QListWidget
1.失去焦点背景颜色,代码设置全选的时候,背景会是白色,需要设置失去焦点背景颜色.(设置焦点,会出现白转化成设置背景色,效果不好) QPalette p; p.setColor(QPalette::I ...
- selenium使用actions.moveToElement处理菜单
//should set firefox path //FirefoxBinary binary=new FirefoxBinary(new File("C:\\Program Files ...
- Python~Outlook
用python处理outlook邮件 按季度将邮件分类,归入新建文件夹2016Q1,2015Q4等等 http://www.tuicool.com/articles/Fra22mq Python读取O ...
- codeforces 514B. Han Solo and Lazer Gun 解题报告
题目链接:http://codeforces.com/problemset/problem/514/B 题目意思:给出双头枪的位置(x0, y0),以及 n 个突击队成员的坐标.双头枪射击一次,可以把 ...
- Linux中环境变量文件及配置(转载)
一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登 ...
- javascript 操作cookie
function setCookie(c_name, value, expiredays) { var exdate = new Date(); exdate.setDate(exdate.getDa ...
- Android屏幕适配dp、px两套解决办法
"又是屏幕适配,这类文章网上不是很多了吗?" 我也很遗憾,确实又是老问题.但本文重点对网上的各种方案做一个简短的总结,和具体使用方法. 若想了解具体Android设备适配的前世因果 ...
- UI课堂笔记
2016.7.18 + (UIColor *)blackColor; + (UIColor *)darkGrayColor; 深灰色 + (UIColor *)lightGrayColor; 浅 ...