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条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL数据库在高并发下的优化方案
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- 面试大杂烩
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Hadoop3单机部署,实现最简伪集群
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程