二维码扫描
来源:互联网 发布:保安巡更软件 编辑:程序博客网 时间:2024/05/16 01:08
最近想要在项目中添加二维码的扫描功能,做了个小demo
需要的准备:有一个素材,即一个可扫描的二维码.
因为扫描需要用到摄像头,属于多媒体,应导入AVFoundation框架,要设置一个输入设备,来采集摄像头捕捉到的信息,和一个输出设备,来解析输入设备采集到的信息,要设置一个layer图层,能够展示摄像头采集到的画面,来展示输入设备采集到的信息,然后创建一个会话,来关联输入设备和输出设备
在最后需要遵守输出设备的解析信息的协议,调用方法,执行后续事件
#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]; self.input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; // 不设置默认的也可用数组,后置摄像头是数组第一个元素// 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];}@end
注意:二维码扫描需要使用后置摄像头,模拟器无法运行,只能真机调试
0 0
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 扫描二维码
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 二维码扫描
- 扫描二维码
- 二维码扫描
- 二维码扫描
- 扫描二维码
- 圆角头像
- led_class浅析
- 欢迎使用CSDN-markdown编辑器
- 黑马程序员—JAVA基础—String类、StringBuffer类
- svn强制添加注释问题处理
- 二维码扫描
- Android-Overview Screen
- android 数字进度条--NumberProgressBar
- dcloud Native.js NFC开发
- 创建第一个Activity
- gradle翻译文档地址
- windows下命令行编译程序
- java佩恩沃星球打怪掉血实现
- 包的设计