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 ...
随机推荐
- 51nod-1686 第K大区间(二分+尺取法)
题目链接: 第K大区间 基准时间限制:1 秒 空间限制:131072 KB 定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. Input 第一行两个数 ...
- 2075 yh女朋友的危机、2544 拯救小矮人
Codevs2075和2544是一道题,直接A过. 2075 yh女朋友的危机 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 ...
- CSS3--动态实现ToolTip效果(实例)
效果图如下↓↓↓↓↓ (知识点见代码注释) HTML <!DOCTYPE html> <html lang="en"> <head> < ...
- AJAX一些基本知识点
ajax的定义: 中文意思:异步JavaScript和XML. 指一种创建交互式网页应用的网页开发技术. ajax的核心是XMLHttpRequest,在页面中由XMLHTTPRequest来发出Ht ...
- codevs1011 数的计算 2001年NOIP全国联赛普及组
题目描述 Description 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 1. 不 ...
- 怎么手写Ajax实现异步刷新
所谓的异步刷新,就是不刷新整个网页进行更新数据. 只有通过js才能实现Ajax,进而实行异步刷新 表单提交数据和Ajax提交数据的区别:表单提交是提交的整个页面中的数据,提交数据之后会抛弃之前的页面( ...
- System.Data.Entity.Internal.AppConfig 类型初始值设定项引发异常
在一开始时将connectionStrings 写在了configSections之上如下图一示,结果抛出:“System.Data.Entity.Internal.AppConfig”的类型初始值设 ...
- UI4_注册登录界面
// // ViewController.h // UI4_注册登录界面 // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015年 ...
- javascript数据结构——写一个二叉搜索树
二叉搜索树就是左侧子节点值比根节点值小,右侧子节点值比根节点值大的二叉树. 照着书敲了一遍. function BinarySearchTree(){ var Node = function(key) ...
- ArcGIS Desktop开发基础(转)
http://www.cnblogs.com/maweifeng/archive/2006/07/19/455024.html 原文地址 ArcGIS Desktop开发的类型 ○ 自定义ArcMa ...