iOS 系统二维码扫描(可限制扫描区域)
使用 AVFoundation系统库来进行二维码扫描并且限制扫描二维码的范围。(因为默认的是全屏扫描)
-(void)beginCode
{
//1.摄像头设备
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
/*
// Media types
AVMediaTypeVideo
AVMediaTypeAudio
AVMediaTypeText
AVMediaTypeClosedCaption
AVMediaTypeSubtitle
AVMediaTypeTimecode
AVMediaTypeMetadata
AVMediaTypeMuxed
*/
//2.设置输入
/**
* 设置输入 此方法需要判断 因为模拟器没有摄像头
*
* @param 把摄像头作为输入的设备
*
* @return 返回AVCaptureInput
*/
NSError *error = nil;
AVCaptureInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (error) {
NSLog(@"没有摄像头%@",error);
return;
}
//3.设置输出(Metdata元数据)
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
//3.1输出的代理 捕获二维码的图像
//dispatch_get_main_queue()使用主线程队列,响应比较同步,使用其他队列响应不同步。
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//3.2 设置扫描区域 默认是全屏扫描
//这个CGRectMake(Y,X,H,W) 1代表最大值 原点是左上角 为起始点
// [output setRectOfInterest:CGRectMake(0, 0.5, 0.5, 0.5)];//左上角 1/4 屏幕
// [output setRectOfInterest:CGRectMake(0.5, 0.5, 0.5, 0.5)];//左下角 1/4 屏幕
// [output setRectOfInterest:CGRectMake(0.5, 0, 0.5, 0.5)]; //右下角 1/4 屏幕
// [output setRectOfInterest:CGRectMake(0, 0, 0.5, 0.5)]; //右上角 1/4 屏幕
// [output setRectOfInterest:CGRectMake((124)/ScreenHigh, ((ScreenWidth220)/2)/ScreenWidth,220/ScreenHigh,220/ScreenWidth)]; //设置自定义像素点的 位置
[output setRectOfInterest:CGRectMake(0.25,0.25, 0.5, 0.5)]; //貌似 中间的感觉!!!
//4.拍摄会话
AVCaptureSession *session = [[AVCaptureSession alloc] init];
_session = session;
//添加session的输入和输出
[session addInput:input];
[session addOutput:output];
//4.1设置输出的格式
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
//5.设置预览图层 (让用户看到扫描结果)
AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer layerWithSession:session];
_previewLayer = preview;
//5.1设置preview的属性
preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
//5.2设置preview的图层的大小
[preview setFrame:self.view.bounds];
//5.3将图层添加到视图的图层
[self.view.layer insertSublayer:preview atIndex:0];
//6.启动会话
[session startRunning];
}
#pragma mark 输出的代理方法
//此方法是在识别到QRCode,并且完成转换
//如果QRCode的内容越大,转换需要的时间就越长
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
//会频繁的扫描
//如果扫描完成就停止
[_session stopRunning];
//删除预览的图层
[_previewLayer removeFromSuperlayer];
//设置界面显示扫描结果
NSString *reslutStr = [[NSString alloc] init];
if (metadataObjects.count > 0) {
AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];
reslutStr = [obj stringValue];//这个就是 扫描的结果
//如果需要对URL 名片 等信息进行扫描 再次进行扩展
}
NSLog(@"%@",metadataObjects);
}
//关于设置扫描区域的解释
@abstract 摘要
Specifies a rectangle of interest for limiting the search area for visual metadata.
指定一个矩形限制搜索区域的视觉感兴趣的元数据。
@discussion 讨论
The value of this property is a CGRect that determines the receiver's rectangle of interest for each frame of video.
这个属性的值是CGRect中决定了接收机的矩形感兴趣的视频的每一帧
The rectangle's origin is top left and is relative to the coordinate space of the device providing the metadata. Specifying
a rectOfInterest may improve detection performance for certain types of metadata. The default value of this property is the
value CGRectMake(0, 0, 1, 1). Metadata objects whose bounds do not intersect with the rectOfInterest will not be returned.
矩形的起源是左上角相对于设备的坐标空间提供元数据。指定rectOfInterest可能改善检测性能对于某些类型的元数据。此属性的默认值价值CGRectMake(0,0,1,1)。元数据对象的边界不相交的rectOfInterest恕不退还
//CGRectMake(Y,X,H,W) 这个 坐标顺序很重要
iOS 系统二维码扫描(可限制扫描区域)的更多相关文章
- iOS系统原生 二维码的生成、扫描和读取(高清、彩色)
由于近期工作中遇到了个需求:需要将一些固定的字段 在多个移动端进行相互传输,所以就想到了 二维码 这个神奇的东东! 现在的大街上.连个摊煎饼的大妈 都有自己的二维码来让大家进行扫码支付.可见现在的二维 ...
- iOS开发-二维码扫描和应用跳转
iOS开发-二维码扫描和应用跳转 序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...
- iOS 原生二维码扫描和生成
代码地址如下:http://www.demodashi.com/demo/12551.html 一.效果预览: 功能描述:WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描工 ...
- IOS开发 二维码功能的实现
原帖地址:http://yul100887.blog.163.com/blog/static/20033613520121020611299/ 如今二维码随处可见,无论是实物商品还是各种礼券都少不了二 ...
- 二维码合成,将苹果和安卓(ios和android)合成一个二维码,让用户扫描一个二维码就可以分别下载苹果和安卓的应用
因为公司推广的原因,没有合适的将苹果和安卓(ios和android)合成一个二维码的工具. 因为这个不难,主要是根据浏览器的UA进行判断,所以就自己开发了一个网站 网站名称叫:好推二维码 https ...
- iOS 原生二维码扫描(可限制扫描区域)
篇文章的主要原因不是展示如何使用 AVFoundation 来进行二维码扫描,更主要的是限制扫描二维码的范围.(因为默认的是全屏扫描) 项目遇到扫描二维码的功能需求,这里我放弃了使用三方库,而采用了 ...
- 【转】 iOS 原生二维码扫描(可限制扫描区域)
在用 AVFoundation 完成扫码后,遇到2个问题: 1,如何限制扫描范围? 2.条形码如何扫描? 一位朋友的文章帮助了我,特地转来,可以帮到有需要的朋友. 原文:http://blog.csd ...
- iOS开发--二维码的扫描
一.需要包含头文件 #import <AVFoundation/AVFoundation.h> 二.通过设置<AVCaptureMetadataOutputObjectsDelega ...
- iOS 原生二维码扫描,带扫描框和扫描过程动画
在代码中使用了相对布局框架Masonry 准备两张图片,一张是扫描边框,一张是扫描时的细线分别命名 scanFrame.png和scanLine.png并提前放入工程 导入相对布局头文件 #defin ...
随机推荐
- hdu 4729 树链剖分
思路:这个树链剖分其实还是比较明显的.将边按权值排序后插入线段树,然后用线段树查找区间中比某个数小的数和,以及这样的数的个数.当A<=B时,就全部建新的管子. 对于A>B的情况比较 建一条 ...
- 揪出ie和Edge的js代码
var userAgent = navigator.userAgent; var isIE = userAgent.indexOf("compatible") > -1 &a ...
- 【PHP基础】常用mySQL语句以及WampServer2.2设置数据库默认编码
一.WampServer2.2设置数据库默认编码(此部分转自http://www.cnsecer.com/5984.html) wamp下MySQL的默认编码是Latin1,不支持中文,要支持中文的话 ...
- UI设计之PS界面初始化设置
一.PS界面初始化 1.新建设置 web设计的基础标准:宽度为1920px,高度自定义,分辨率72px,背景模式RGB 8位.(提示:可以“存为预设”以便以后直接调用) 注意:背景内容为透明!!! ...
- django 学习-15 .Django文件上传(用户注册)
1.vim blog/views.py from django.shortcuts import render_to_responsefrom django.http import HttpR ...
- SkinSoft中.vssf样式文件在VS2005中的应用(图文)
前些天在项目中应用了皮肤控件,涉及到了(.ssk),也做了相应的记录. 但还是觉得.ssk的并不算满意,所以今天又粗略的研究了一下SkinSoft这个软件: 如题,他的作用就是自定义控件与窗体样式. ...
- MVC 全站开启缓存,缓解服务器的请求压力
protected void Application_BeginRequest() { //获取当前请求的url string url = HttpContext.Current.Request.Pa ...
- 【SNMP】SNMP概述
SNMP概述 SNMP(Simple Network Management Protocol,简单网络管理协议)是目前UDP/IP网络中应用最为广泛的网络管理协议,它提供了一个管理框架来监控和维护互联 ...
- Cocos2d-JS中的cc.LabelAtlas
cc.LabelAtlas是图片集标签,其中的Atlas本意是“地图集”.“图片集”,这种标签显示的文字是从一个图片集中取出的,因此使用cc.LabelAtlas需要额外加载图片集文件.cc.Labe ...
- 将slider滑块从横着变为竖着的时候坐标变换的计算
//// ViewController.m// imageview添加按钮//// Created by hehe on 15/9/22.// Copyright (c) 2015年 wang ...