当前位置: 首页 > 编程日记 > 正文

如何给iOS应用添加原生的二维码扫描功能

之前总觉得二维码扫描很高大上,其实apple工程师早就为我们提供了便捷的方法。二维码扫描第三方的库也挺多的,不过效率高的当属系统提供的扫描方法。

二维码扫描主要用到了以下几个类:

AVCaptureDevice,AVCaptureDeviceInput,AVCaptureMetadataOutput,AVCaptureSession,AVCaptureVideoPreviewLayer
它们之间的关系看这篇文章

扫描的核心代码如下:(最后附上完整代码)

    //获取摄像设备AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];if (!device) return;//创建输入流AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];if (!input) return;//创建输出流AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];if (!output) return;output.rectOfInterest = CGRectMake(0.1, 0, 0.9, 1);//设置代理 在主线程里刷新[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];//初始化链接对象_session = [[AVCaptureSession alloc]init];//高质量采集率[_session setSessionPreset:AVCaptureSessionPresetHigh];if ([_session canAddInput:input]) {[_session addInput:input];}else{return;}if ([_session canAddOutput:output]) {[_session addOutput:output];}else{return;}//设置扫码支持的编码格式(如下设置条形码和二维码兼容)output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:_session];layer.videoGravity = AVLayerVideoGravityResizeAspectFill;layer.frame = self.view.layer.bounds;[self.view.layer insertSublayer:layer atIndex:0];//开始捕获[_session startRunning];

完整代码地址

转载于:https://www.cnblogs.com/Qingbo/p/5153237.html

相关文章:

2021-2027年中国市医疗电子场投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国医疗电子行业市场行业相关概述、中国医疗电子行业市场行业运行环境、分析了中国医疗电子行…

RabbitMQ入门(4)--路由

2019独角兽企业重金招聘Python工程师标准>>> ###路由 ###(使用Java客户端) 在先前的指南中,我们建立了一个简单的日志系统。我们可以将我们的日志信息广播到多个接收者。 在这部分的指南中,我们将要往其中添加一个功能…

从一个数组中寻找出现奇数次的数字

假设给定了数组nums为[0,1,2,3,4,5,6,7,8,9,10,10,9,8,7,6,5,4,1,2,3,3,0] 其中3出现了3次 而其他数字都出现了两次 则我们应该得到结果为3 第一种方式:使用Hash 1 /**2 * 使用hash3 * */4 public static int singleNumber_1(int[] nums) {5 …

Blender写实建筑场景制作学习教程 Exterior Visualization in Blender 2.9

MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:26节课(3h 41m) |大小:3.3 GB 使用Blender创建惊人的外部渲染。 你会学到: Blender中的建模、着色…

Postman增删改查接口测试

查 一.选择Get方式 二.点击Send开始测试,得出结果 增 一.选择Post方式 二.输入需要增添的数据 三.点击Send测试 四.没有报错,添加成功 查看一下,发现确实添加进去了 删 一.选择Delete方式 二.根据id删除,在请求路径下直接写出…

新安装Ubuntu加载时提示“为/检查磁盘时发生严重错误”的解决方法

本文部分内容转载自: http://jingyan.baidu.com/article/0aa22375bbffbe88cc0d6419.html http://www.aichengxu.com/view/35086 解决方法: 1. 进入Ubuntu启动菜单时按e 键进入启动项编辑模式: 2. 找到代码【ro rootflagsync】,将其…

android binder机制之——(创建binder服务)

Binder机制编程前面的几篇文章具体介绍了android中binder机制的方方面面,相信你对binder机制已经有了较深刻的理解。俗话说得好“学以致用”,以下我们就通过在android系统中创建一个我们自己的binder服务,来加深对binder机制的理解。&#xf…

通过NSProxy来解决NSTimer使用不当造成内存泄漏的问题

NSTimer的一般使用: 1 interface ViewController : UIViewController2 property (nonatomic, strong) NSTimer *timer;3 end4 5 implementation ViewController6 - (void)viewDidLoad {7 [super viewDidLoad];8 [self startTimer];9 } 10 11 - (void)startTimer { 12 …

Blender 2.9中的真实感三维产品全流程制作学习教程

MP4 |视频:h264,1280720 |音频:AAC,44.1 KHz,2 Ch 语言:英语中英文字幕(根据原英文字幕机译更准确) |时长:41节课(6h 23m) |大小:5.83 GB 含课程文件 使用blender 2.9建模、纹理、光照和渲染真实的吉他 …

SpringBoot中的SFL4J日志

SpringBoot:底层是Spring框架,Spring框架默认使用的是JCL日志的抽象层 SpringBoot选用SLF4J和logback 如何系统地在系统中使用SLF4J 在开发的使用,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象…

web开发性能优化---用户体验篇

怎样从技术角度怎样增强用户体验。都是非常多平台都在做的事情,依据个人实际经验碰到几种体验做下总结。1、降低页面刷新白屏适当使用ajax技术。改善刷新白屏现象。2、信息提醒,邮件、站内信、短信在购物流程、售后流程适当添加信息温馨提醒环节&#xf…

linux命令2--cd和pwd

2019独角兽企业重金招聘Python工程师标准>>> cd是linux中最为常见的一个命令,其作用就是切换到某一个路径下 例子1 到自己的用户目录下 cd ~ 也可以直接cd 例子2 返回进入当前目录之前的目录 cd - 例子3 把上一个命令作为cd的参数命令 cd !$ 参考文档&am…

COALESCE语句解救sql的sum问题

mysqlmybatis有一个sql语句是统计用的 <select id"getNum" resultType"map"> 结果是一个map&#xff0c; select语句的结果是一些sum select sum(t.anum),sum(t.bnum)from tableSum twhere t.id #{id} 调试发现&#xff0c;数据库明明记录已经落入&…

在UE5创造一个多山的松树森林场景学习教程

UE5游戏场景设计制作视频教程 大小解压后&#xff1a;4.37G 1920X1080 mp4 语言&#xff1a;英语中英字幕&#xff08;机译&#xff09;时长&#xff1a;5小时 20分 课程获取&#xff1a;在UE5创造一个多山的松树森林场景学习教程

编写纳新网站后端的相关知识总结

使用HSSFWorkbook导出数据库中的数据 导入Apache POI Maven jar包 <!-- Apache POI --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.6</version> </dependency>在控制层编…

IOSUIcontrol事件

UIKit提供了一组控件&#xff1a;UISwitch开关、UIButton按钮、UISegmentedControl分段控件、UISlider滑块、UITextField文本字段控件、UIPageControl分页控件。 控件是对UIView派生类的实用增强及补充&#xff0c;并可以直接附着于导航栏、表格单元&#xff0c;甚至更大的对象…

Xcode Debugging

程序员日常开发中有大量时间都会花费在 debug 上&#xff0c;从事 iOS 开发不可避免地需要使用 Xcode。这篇博客就主要介绍了 Xcode 中几种能够大幅提升代码调试效率的方式。“If debugging is the process of removing bugs, then programming must be the process of putting…

css小技巧 -- 单标签实现单行文字居中,多行文字居左

可能出现的尺寸场景: 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&q…

Unity游戏开发大师班

大小解压后&#xff1a;8.63G 持续时间19h 包含项目文件 1280X720 MP4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; Unity游戏开发大师班 信息: 要求 –没有课程要求&#xff0c;展示了开发过程的每一步(包括解释的每一行代码) 这门课…

GC处理的分析

GC处理的深入分析 在Java中针对垃圾收集也提供了多种不同的处理分类 1.引用计数&#xff1a; 一个实例化对象&#xff0c;如果有程序使用了这个引用对象&#xff0c;引用计数加一&#xff0c;当一个对象使用完毕&#xff0c;引用计数减一&#xff0c;当引用计数为0时&#x…

2016.1.20 dubbo启动之后机器ip有问题

环境 100.0.4.222 zookerper 2182 100.0.4.221 dubbo 20871 1.问题 dubbo 对应的机器ip 是202.106.199.37 不是100.0.4.221 2.解决 说明 主机名有问题 修改主机名 使之生效 重启zookeeper服务 和dubbo服务 搞定 转载于:https://www.cnblogs.com/huawei306/p…

在Eclipse或MyEclipse中安装findbugs插件

2019独角兽企业重金招聘Python工程师标准>>> 我们都知道&#xff0c;在Eclipse或MyEclipse中安装插件有两种方式&#xff0c;一种是在线安装&#xff0c;第二种是先下载插件然后在本地安装。 在这里我们先介绍第一种在线安装。 Eclipse上在线安装findbugs(具体步骤如…

Jboss解决只能通过localhost访问而不能使用IP访问项目的问题

jboss的配置文件&#xff0c;如 E:\downloadChrome\wildfly-10.1.0.Final\standalone\configuration\shandalone.xml <interfaces> <interface name"management"> <inet-address value"${jboss.bind.address.management:127.0.0.1}"/>…

一.JDBC概述

第1章&#xff1a;JDBC概述 1.1 数据的持久化 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大…

在Blender中创建惊人的低多边形动画

大小解压后&#xff1a;13.5G 持续时间10小时 包括项目文件 1920X1080 MP4 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 标题:CGBoost学院–立方体世界在Blender中创建惊人的低多边形动画 信息: 创建漂亮的3D动画&#xff0c;就像玩乐高…

开发Eclipse自定义控件

摘自&#xff1a;http://www.ibm.com/developerworks/cn/opensource/os-eclipcntl/ 我们在开发自定义控件时主要考虑以下问题&#xff1a; 1、 自定义控件的绘制&#xff1a;通常我们需要自己对控件的形状或图案进行绘制&#xff1b; 2、 控件对键盘事件的响应&#xff1a;当焦…

小米手机无法连接eclipse调试案例

按照参考博客2的方法 小米2S手机在Eclipse真机调试时&#xff0c;设备选择列表无法显示手机&#xff0c;DDMS也连接不上设备&#xff0c;解决步骤&#xff1a; 1.打开手机设置中开发者选项 - USB调试开启&#xff1b; 2.保证小米2S手机Windows下设备驱动已安装&#xff0c;可…

手机号码格式验证和 FASTDFS 工具类

常见大陆和香港号码格式验证 import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException;public class PhoneFormatCheckUtils {// 大陆号码或香港号码均可public static boolean isPhoneLegal(String str) throws Patt…

Maya摄像机动画技能学习教程

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:4h 38m |大小解压后:1.65 GB 含课程文件 Maya的相机工具是所有3D包中最好的。在本课程中&#x…

前端解决跨域问题的8种方案(最新最全)

.同源策略如下&#xff1a; URL说明是否允许通信http://www.a.com/a.jshttp://www.a.com/b.js同一域名下允许http://www.a.com/lab/a.jshttp://www.a.com/script/b.js同一域名下不同文件夹允许http://www.a.com:8000/a.jshttp://www.a.com/b.js同一域名&#xff0c;不同端口不允…