使用 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 系统二维码扫描(可限制扫描区域)的更多相关文章

  1. iOS系统原生 二维码的生成、扫描和读取(高清、彩色)

    由于近期工作中遇到了个需求:需要将一些固定的字段 在多个移动端进行相互传输,所以就想到了 二维码 这个神奇的东东! 现在的大街上.连个摊煎饼的大妈 都有自己的二维码来让大家进行扫码支付.可见现在的二维 ...

  2. iOS开发-二维码扫描和应用跳转

    iOS开发-二维码扫描和应用跳转   序言 前面我们已经调到过怎么制作二维码,在我们能够生成二维码之后,如何对二维码进行扫描呢? 在iOS7之前,大部分应用中使用的二维码扫描是第三方的扫描框架,例如Z ...

  3. iOS 原生二维码扫描和生成

    代码地址如下:http://www.demodashi.com/demo/12551.html 一.效果预览: 功能描述:WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描工 ...

  4. IOS开发 二维码功能的实现

    原帖地址:http://yul100887.blog.163.com/blog/static/20033613520121020611299/ 如今二维码随处可见,无论是实物商品还是各种礼券都少不了二 ...

  5. 二维码合成,将苹果和安卓(ios和android)合成一个二维码,让用户扫描一个二维码就可以分别下载苹果和安卓的应用

    因为公司推广的原因,没有合适的将苹果和安卓(ios和android)合成一个二维码的工具. 因为这个不难,主要是根据浏览器的UA进行判断,所以就自己开发了一个网站 网站名称叫:好推二维码  https ...

  6. iOS 原生二维码扫描(可限制扫描区域)

    篇文章的主要原因不是展示如何使用  AVFoundation 来进行二维码扫描,更主要的是限制扫描二维码的范围.(因为默认的是全屏扫描) 项目遇到扫描二维码的功能需求,这里我放弃了使用三方库,而采用了 ...

  7. 【转】 iOS 原生二维码扫描(可限制扫描区域)

    在用 AVFoundation 完成扫码后,遇到2个问题: 1,如何限制扫描范围? 2.条形码如何扫描? 一位朋友的文章帮助了我,特地转来,可以帮到有需要的朋友. 原文:http://blog.csd ...

  8. iOS开发--二维码的扫描

    一.需要包含头文件 #import <AVFoundation/AVFoundation.h> 二.通过设置<AVCaptureMetadataOutputObjectsDelega ...

  9. iOS 原生二维码扫描,带扫描框和扫描过程动画

    在代码中使用了相对布局框架Masonry 准备两张图片,一张是扫描边框,一张是扫描时的细线分别命名 scanFrame.png和scanLine.png并提前放入工程 导入相对布局头文件 #defin ...

随机推荐

  1. codeforces 613B B. Skills(枚举+二分+贪心)

    题目链接: B. Skills time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  2. codeforces 677B B. Vanya and Food Processor(模拟)

    题目链接: B. Vanya and Food Processor time limit per test 1 second memory limit per test 256 megabytes i ...

  3. winform分页管理

    注意:其中可能用到部分自定义的扩展方法,在使用中需自己修改一下 /// <summary> /// 分页管理 /// </summary> public class Pagin ...

  4. cocos2dx-lua 批量打包及修改

    coco2dx目前大部分开发者肯定是用lua解决问题,问题来了,每次改一下lua配置可能你每次都得运行 cocos luacompile -p android 针对不同的平台,可能会有某些配置会略有不 ...

  5. linux中Apache更Nginx环境配置教程

    想把Apache2.2换Nginx已经有些日子,今天给动手了.找了个稳定版本:1.4.1  http://nginx.org/download/nginx-1.4.1.zip 配置很简单,就是ngin ...

  6. unicode 汉字编码表

    啊:21834 阿:38463 埃:22467 挨:25384 哎:21710 唉:21769 哀:21696 皑:30353 癌:30284 蔼:34108矮:30702 艾:33406 碍:308 ...

  7. Codevs 2898 卢斯的进位制

    时间限制: 1 s  空间限制: 32000 KB  题目等级 : 青铜 Bronze 题目描述 Description 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母 ...

  8. UVA 1646 Edge Case

    题意:n(3<=n<=10000)个结点组成一个圈,点顺次连接为边,求没有公共点的边集个数. 分析: 1.推规律,n=3有4个,n=4有7个,n=5有11个,n=6有18个,--,a[i] ...

  9. 链接与ELF文件格式的复习

    在这里复习一下链接的知识: 什么是链接(linking):把源代码形成的模块独立编译后组装成一个整体的的过程叫做链接. 链接主要过程包括:地址和空间分配(address and storage all ...

  10. 增量与位置PID

    转载:http://blog.sina.com.cn/s/blog_408540af0100b17n.html http://bbs.ednchina.com/BLOG_ARTICLE_211739. ...