扫描二维码

来源:互联网 发布:java短信验证码第三方 编辑:程序博客网 时间:2024/05/18 01:25

一、二维码的介绍

ios7.0开始,系统开始支持二维码扫描功能

二维码实现思路:
1、输入设备:用来获取外界信息(摄像头、麦克风、键盘)
2、输出设备:将收集到的信息,做解析,获取内容
3、会话session:连接输入和输出设备
4、特殊的layer:展示输入设备,所采集的信息


二、基本实现

#import <AVFoundation/AVFoundation.h>@interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>// 输入设备@property (nonatomic, strong)AVCaptureDeviceInput *input;// 输出设备@property (nonatomic, strong)AVCaptureMetadataOutput *output;// 特殊会话@property (nonatomic, strong)AVCaptureSession *session;// 特殊layer@property (nonatomic, strong)AVCaptureVideoPreviewLayer *previewLayer;@end
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {    //1、创建输入设备    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];    self.input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];    //2、创建输出设备    self.output = [[AVCaptureMetadataOutput alloc] init];    //3、创建会话session    self.session = [[AVCaptureSession alloc] init];    //会话扫描展示的大小    [self.session setSessionPreset:AVCaptureSessionPresetHigh];    //会话跟输入设备和输出设备的关系    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]];    //4、创建layer    self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];    self.previewLayer.frame = self.view.bounds;    [self.view.layer addSublayer:self.previewLayer];    //5、启用会话    [self.session stopRunning];}


三、代码封装(动画、手电筒)