二维码扫描,真机
2015-12-01 18:41
330 查看
#import
"ViewController.h"
#import
<AVFoundation/AVFoundation.h>
//1.有个素材
@interface
ViewController
()<AVCaptureMetadataOutputObjectsDelegate>
//2.输入设备
采集摄像头捕捉到信息
@property
(nonatomic,
strong)
AVCaptureDeviceInput
*input;
//3.输出设备
解析输入设备采集到的信息
@property
(nonatomic,
strong)
AVCaptureMetadataOutput
*output;
//4.layer (特殊图层
能够展示摄像头采集到画面)
展示输入设备采集到的信息
@property
(nonatomic,
strong)
AVCaptureVideoPreviewLayer
*layer;
//5.关联输入设备和输出设备
:
会话
@property
(nonatomic,
strong)
AVCaptureSession
*session;
@end
@implementation
ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
//1.创建输入设备
//AVCaptureDevice
设备
:
摄像头(video)
麦克风(audio)
//AVCaptureDeviceInput
输入设备
default
默认后置
//AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSArray
*allDevice = [AVCaptureDevice
devicesWithMediaType:AVMediaTypeVideo];
self.input
= [AVCaptureDeviceInput
deviceInputWithDevice:[allDevice
firstObject]
error:nil];
//2.创建输出设备
self.output
= [[AVCaptureMetadataOutput
alloc]init];
//解析
->
返回数据
//https://www.douniwan.com
//设置输出设备的代理
返回解析后的数据
[self.output
setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];
//3.创建会话
self.session
= [[AVCaptureSession
alloc]init];
//4.关联
会话跟设备
if
([self.session
canAddInput:self.input])
{
[self.session
addInput:self.input];
}
if
([self.session
canAddOutput:self.output])
{
[self.session
addOutput:self.output];
}
//告诉数据类型
AVMetadataObjectTypeQRCode
二维码
self.output.metadataObjectTypes
=
@[AVMetadataObjectTypeQRCode];
//扫描框大小
[self.session
setSessionPreset:AVCaptureSessionPresetHigh];
//5.指定layer
的frame
然后添加到View上
self.layer
= [[AVCaptureVideoPreviewLayer
alloc]initWithSession:self.session];
self.layer.frame
=
self.view.bounds;
[self.view.layer
addSublayer:self.layer];
//6.开启会话
[self.session
startRunning];
}
//扫描出结果之后就会调用
- (void)captureOutput:(AVCaptureOutput
*)captureOutput didOutputMetadataObjects:(NSArray
*)metadataObjects fromConnection:(AVCaptureConnection
*)connection
{
AVMetadataMachineReadableCodeObject
*objc = [metadataObjects
firstObject];
NSString
*str = objc.stringValue;
NSLog(@"%@",str);
//
//停止扫描
[self.session
stopRunning];
//移除layer
[self.layer
removeFromSuperlayer];
}
"ViewController.h"
#import
<AVFoundation/AVFoundation.h>
//1.有个素材
@interface
ViewController
()<AVCaptureMetadataOutputObjectsDelegate>
//2.输入设备
采集摄像头捕捉到信息
@property
(nonatomic,
strong)
AVCaptureDeviceInput
*input;
//3.输出设备
解析输入设备采集到的信息
@property
(nonatomic,
strong)
AVCaptureMetadataOutput
*output;
//4.layer (特殊图层
能够展示摄像头采集到画面)
展示输入设备采集到的信息
@property
(nonatomic,
strong)
AVCaptureVideoPreviewLayer
*layer;
//5.关联输入设备和输出设备
:
会话
@property
(nonatomic,
strong)
AVCaptureSession
*session;
@end
@implementation
ViewController
- (void)viewDidLoad {
[super
viewDidLoad];
//1.创建输入设备
//AVCaptureDevice
设备
:
摄像头(video)
麦克风(audio)
//AVCaptureDeviceInput
输入设备
default
默认后置
//AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
NSArray
*allDevice = [AVCaptureDevice
devicesWithMediaType:AVMediaTypeVideo];
self.input
= [AVCaptureDeviceInput
deviceInputWithDevice:[allDevice
firstObject]
error:nil];
//2.创建输出设备
self.output
= [[AVCaptureMetadataOutput
alloc]init];
//解析
->
返回数据
//https://www.douniwan.com
//设置输出设备的代理
返回解析后的数据
[self.output
setMetadataObjectsDelegate:self
queue:dispatch_get_main_queue()];
//3.创建会话
self.session
= [[AVCaptureSession
alloc]init];
//4.关联
会话跟设备
if
([self.session
canAddInput:self.input])
{
[self.session
addInput:self.input];
}
if
([self.session
canAddOutput:self.output])
{
[self.session
addOutput:self.output];
}
//告诉数据类型
AVMetadataObjectTypeQRCode
二维码
self.output.metadataObjectTypes
=
@[AVMetadataObjectTypeQRCode];
//扫描框大小
[self.session
setSessionPreset:AVCaptureSessionPresetHigh];
//5.指定layer
的frame
然后添加到View上
self.layer
= [[AVCaptureVideoPreviewLayer
alloc]initWithSession:self.session];
self.layer.frame
=
self.view.bounds;
[self.view.layer
addSublayer:self.layer];
//6.开启会话
[self.session
startRunning];
}
//扫描出结果之后就会调用
- (void)captureOutput:(AVCaptureOutput
*)captureOutput didOutputMetadataObjects:(NSArray
*)metadataObjects fromConnection:(AVCaptureConnection
*)connection
{
AVMetadataMachineReadableCodeObject
*objc = [metadataObjects
firstObject];
NSString
*str = objc.stringValue;
NSLog(@"%@",str);
//
//停止扫描
[self.session
stopRunning];
//移除layer
[self.layer
removeFromSuperlayer];
}
相关文章推荐
- .htaccess 中 %{REQUEST_FILENAME} 及其参数的意思
- 使用ssh-keygen 命令更改SSH Key 密码
- Android中几种常用的定时器和延时方法
- 信息安全系统设计基础实验三—20135215黄伟业20135222胡御风
- 企业shell编程基础问题解决实践-是骡子是马溜溜!
- Python WindowsError
- spark on yarn 出现的问题【测试wordcount程序遇到的错误,ipc.client连接到yarn的端口失败】
- 杭电-1229还是A+B
- 约瑟夫问题优化
- Python之服务器模块设计学习
- 常见面试题
- linux下测试宽带速度
- [JAVA]ServiceLoader类学习
- android 同时实现微信分享和微信登录功能
- JavaScript学习3-JS基本概念
- RecyclerView 实现gallery画廊效果
- 栈和队列笔记
- RecyclerView 实现gallery画廊效果
- RecyclerView 实现gallery画廊效果
- FZU 2148 Moon Game