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. Java集合中Set的常见问题及用法

    在这里演示的案例是衔接Java集合中的List(点击查看)那篇博文的,本节我们学习的Set的用法. Set是Collection的一个重要的子接口,Set中的元素是无序排列的,并且元素不可以重复,被称 ...

  2. Tomcat服务器绑定域名的配置

    前面写到过Linux下tomcat服务器的部署,实际上只要域名正常解析到了服务器,那么不用绑定域名也是可以正常访问的,比如默认情况下访问xxx.net:8080与www.xxx.net:8080都可以 ...

  3. MAC OS X 常用通用快捷键

    注:由于使用的是Windows键盘,习惯了Ctrl + c/v复制粘贴,所以修改了修饰键,Command(⌘)键和Control(^)键互换,以下的Ctrl键均为Command键,对应键盘上的实际左C ...

  4. JSP公用COMMON文件

    head.jsp: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...

  5. 把图标改成web字体

    一.下载自己想要的矢量图标,然后在AI中打开二.在AI中将有瑕疵的图标修改一下,再分别另存为svg格式的图标三.打开IcoMoon Web app网页,然后点击左上角的+Import Icons添加你 ...

  6. 【leetcode】Combinations (middle)

    Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For exampl ...

  7. (2016弱校联盟十一专场10.2) A.Nearest Neighbor Search

    题目链接 水题,算一下就行. #include <bits/stdc++.h> using namespace std; typedef long long ll; ll x[],y[], ...

  8. php继承、多态

    继承: 概念:子类可以继承父类的一切 特点:单继承:一个子类只能有一个父类,一个父类可以派生出多个子类 方法重写:在子类里面对父类的方法进行重写. 重写:override 重载,编译多态:overlo ...

  9. JS 保留两位小数问题收集

    1.使用四舍五入的方法,保留小数点后的两位小数: toFixed里面的参数表示保留的小数的位数,范围是0-20,超过20位就会报错了 <script> var num=22.127456; ...

  10. tableview详细介绍

    tableview详细介绍: https://www.baidu.com/link?url=MU5a5om66vYEKAcnvmXCeCwMGetezW5o2X11OUnwN7-fb_jWPx6xyv ...