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 ...
随机推荐
- 【转】WebMagic-总体流程源码分析
转自:http://m.blog.csdn.net/article/details?id=51943601 写在前面 前一段时间开发[知了]用到了很多技术(可以看我前面的博文http://blog.c ...
- 16进制字符串转换为3进制(扩展至K进制)
[本文链接] http://www.cnblogs.com/hellogiser/p/16-to-3-or-k.html [题目] 写代码把16进制表示的串转换为3进制表示的串.例如x=”5”,则返回 ...
- Java for LeetCode 216 Combination Sum III
Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...
- K3问题 无法创建中间层 组件<KdSvrMgr>无法正常工作
K3遇到如下问题 一直无法解决,这个是本地计算机的问题,跟服务器没关系,采用笨方法,重装K3(重装到本磁盘.其他磁盘),重装系统,虽然笨,但最后都解决掉了
- Match:Keywords Search(AC自动机模板)(HDU 2222)
多模匹配 题目大意:给定很多个字串A,B,C,D,E....,然后再给你目标串str字串,看目标串中出现多少个给定的字串. 经典AC自动机模板题,不多说. #include <iostream& ...
- WebFrom 的js日期控件
1.WdatePicker.js /* * My97 DatePicker 4.7 Release * License: http://www.my97.net/dp/license.asp */ v ...
- Oracle数据库对象题库
一. 填空题 在用 create 语句创建基本表时,最初只是一个空的框架,用户可以使用insert命令把数据插入表中. 在基本表不需要时,可以使用 drop table 语句撤消.在一个基本表撤 ...
- supersr--class_copyIvarList和class_copyPropertyList的区别
class_copyPropertyList返回的仅仅是对象类的属性(@property申明的属性), 而class_copyIvarList返回类的所有属性和变量(包括在@interface大括号中 ...
- 解决安卓TextView异常换行,参差不齐等问题
参考:http://blog.csdn.net/u012286242/article/details/28429267?utm_source=tuicool&utm_medium=referr ...
- 微信支付 - V3退款
退款问题: 1.证书加载不进去,出现"内部错误" 解决:在iis中找到对应的应用连接池,右键高级设置,找到"加载用户配置文件"改为true. 2.需 ...