您的位置:首页 > 其它

二维码扫描,真机

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];

   
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: