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

  1. Ios二维码扫描(系统自带的二维码扫描)

    Ios二维码扫描 这里给大家介绍的时如何使用系统自带的二维码扫描方法和一些简单的动画! 操作步骤: 1).首先你需要搭建UI界面如图:下图我用了俩个imageview和一个label 2).你需要在你 ...

  2. iOS二维码扫描IOS7系统实现

    扫描相关类 二维码扫描需要获取摄像头并读取照片信息,因此我们需要导入系统的AVFoundation框架,创建视频会话.我们需要用到一下几个类: AVCaptureSession 会话对象.此类作为硬件 ...

  3. iOS - 二维码扫描和应用跳转

    序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如ZXing或者ZBar.使用时集成麻烦, ...

  4. ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。

            二维码介绍: 二维码(QR(Quick Response)code),又称二维条码,最早起源于日本. 它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息 ...

  5. iOS二维码扫描的实现(Swift)

    随着二维码的普遍使用,二维码扫描也成为了很多app的一个基本功能,本篇主要来介绍一下如何实现一个简单的二维码扫描功能.本文使用了XCode自带的AVFoundation 库,利用Swfit语言实现. ...

  6. iOS 二维码扫描 通过ZBar ZXing等第三方库

    扫描二维码的开源库有很多如 ZBar.ZXing等 ZBar的使用方法: 下载ZBar SDK 地址https://github.com/bmorton/ZBarSDK ZBarSDK是一个开源的SD ...

  7. iOS 二维码扫描

    // 导入 AVFoundation.framwork 框架#import "HDCodeViewController.h" #import "HDNormalViewC ...

  8. 有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)

    今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功 ...

  9. iOS开发-二维码扫描和应用跳转

    iOS开发-二维码扫描和应用跳转   序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...

随机推荐

  1. struts2 提供的校验器列表

  2. ios 中使用https的知识

    先看文章,这篇文章说的是使用AFNetworing进行https时的事项,十分好!http://blog.cnbang.net/tech/2416/ ios中使用https,主要就是使用NSURLCr ...

  3. java web 学习 --第十一天(Java三级考试)

    第十天的学习内容:http://www.cnblogs.com/tobecrazy/p/3473954.html Servlet理论知识: 1.servlet 生成class位置 tomcat编译后生 ...

  4. 问题 A: 【动态规划】采药_二维数组_一维数组

    问题 A: [动态规划]采药 时间限制: 1 Sec  内存限制: 64 MB提交: 35  解决: 15[提交][状态][讨论版] 题目描述 山洞里有一些不同的草药,采每一株都需要一些时间,每一株也 ...

  5. codeforces 336 Div.2 B. Hamming Distance Sum

    题目链接:http://codeforces.com/problemset/problem/608/B 题目意思:给出两个字符串 a 和 b,然后在b中找出跟 a 一样长度的连续子串,每一位进行求相减 ...

  6. c/c++与Python的语法差异

    1.程序块语法方面: c/c++中用一对“{}”将多段语句括起来,表示一个程序块,并以右大括号表明程序块结束 ;i<n;i++) { cout<<a[i]; j+=; } Pytho ...

  7. 【Bochs 官方手册翻译】 第一章 Bochs介绍

    Bochs 是一个可以完全模拟 Intel x86 计算机的虚拟机系统.它包含了 Intel x86 CPU 仿真.常见设备仿真.以及定制 BIOS.Bochs 可以虚拟多种不同类型的 x86 CPU ...

  8. September 23rd 2016 Week 39th Friday

    Even a small star shines in the darkness. 星星再小,也会发光. In the darkness, even a small star can shine. N ...

  9. iphone删除自动更新的系统

    1.利用 etc/host 文件屏蔽 Apple 更新服务器用电脑 iTools 或者手机 iFile 打开 etc/host 文件,添加:127.0.0.1 mesu.apple.com到文件中.2 ...

  10. notifyDataSetInvalidated和notifyDataSetChanged有什么区别

    notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容.public void notifyDataSetChang ...