iOS QRCode(二维码)
实现思路
- 输入设备(用来获取外界信息) 摄像头, 麦克风, 键盘
- 输出设备 (将收集到的信息, 做解析, 来获取收到的内容)
- 会话session (用来连接输入和输出设备)
- 特殊的layer (展示输入设备所采集的信息)
1. 导包
#import <AVFoundation/AVFoundation.h>
2. 代码
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate> //1. 输入设备(用来获取外界信息) 摄像头, 麦克风, 键盘 @property (nonatomic, strong) AVCaptureDeviceInput *input; //2. 输出设备 (将收集到的信息, 做解析, 来获取收到的内容) @property (nonatomic, strong) AVCaptureMetadataOutput *output; //3. 会话session (用来连接输入和输出设备) @property (nonatomic, strong) AVCaptureSession *session; //4. 特殊的layer (展示输入设备所采集的信息) @property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer; @end @implementation ViewController #pragma mark 点击屏幕开始扫描 - (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 new]; //3.会话session (用来连接输入和输出设备) self.session = [AVCaptureSession new]; // 会话扫描展示的大小 [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()]; //设置元数据类型 二维码QRCode [self.output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; //4.特殊的layer (展示输入设备所采集的信息) self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session]; // 大小layer的大小 self.previewLayer.frame = self.view.bounds; [self.view.layer addSublayer:self.previewLayer]; //5. 启动会话 [self.session startRunning]; } /** captureOutput : 输出设备 metadataObjects : 元数据对象的数组 connection : 连接 */ - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection { //1. 停止会话 [self.session stopRunning]; //2. 删除layer [self.previewLayer removeFromSuperlayer]; //3. 遍历数据获取内容 for (AVMetadataMachineReadableCodeObject *obj in metadataObjects) { NSLog(@"obj: %@",obj.stringValue); } } @end

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
iOS Social(社会化分享)
1. 导包 #import <Social/Social.h> 2. 绑定账号 1). 系统语言要切换为中文。切换方法:Settings->General->Language & Region->iPhone Language->简体中文->Done->Change to Simplified Chinese. 2). 新浪微博账号绑定。绑定方法:设置->新浪微博,输入账号和密码,点击登录即可成功绑定。 图1.png 3. 代码 #import "ViewController.h" #import <Social/Social.h> @implementation ViewController // 触摸屏幕分享 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { // 1. 判断系统服务是否可用 if (![SLComposeViewController isAvailableForService...
- 下一篇
iOS Notification(本地通知)
代码 #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } /** // 触发时间 @property(nullable, nonatomic,copy) NSDate *fireDate; // 时区 @property(nullable, nonatomic,copy) NSTimeZone *timeZone; // 重复 --> 单位是日历组件 , 0 代表不重复 @property(nonatomic) NSCalendarUnit repeatInterval; // 重复 --> 上面那个属性所依赖的日历格式 公历 农历 @property(nullable, nonatomic,copy) NSCa...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,CentOS7官方镜像安装Oracle11G
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启