ios开发之----扫描二维码、条形码

1、搭建扫描二维码的界面。可采用storyboard来搭建

2、创建对象的控制器类来管理二维码的扫描

3、在这个类中导入 #import <AVFoundation/AVFoundation.h> 框架

4、在viewDidLoad中调用

1 [self setUpQrcode];

5、实现上面的方法

- (void)setUpQrcode
{
    // 1、获取输入设备
    AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
    // 2、根据输入设备创建输入对象
    AVCaptureDeviceInput *inputObj = [[AVCaptureDeviceInput alloc] initWithDevice:inputDevice error:nil];
    // 3、创建输出对象
    AVCaptureMetadataOutput *outputObj = [[AVCaptureMetadataOutput alloc] init];
    // 4、创建输出对象的代理,这里设置了代理为self,要遵守代理协议,实现代理方法
    [outputObj setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

    // 5、创建会话
    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    self.session = session; // 会话要是全局变量,所以设为:属性

    // 6、将输入和输出添加到会话
    if ([session canAddInput:inputObj]) {
        [session addInput:inputObj];
    }
    if ([session canAddOutput:outputObj]) {
        [session addOutput:outputObj];
    }

    // 7、设置输出的类型(一定要在输入对象添加到会话里面以后再设置输出类型,否则会报错)
    [outputObj setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];    /*这是扫面条形码时要设置的类型

[outputObj setMetadataObjectTypes:

@[AVMetadataObjectTypeUPCECode,

AVMetadataObjectTypeCode39Code,

AVMetadataObjectTypeCode39Mod43Code,

AVMetadataObjectTypeEAN13Code,

AVMetadataObjectTypeEAN8Code,

AVMetadataObjectTypeCode93Code,

AVMetadataObjectTypeCode128Code,

AVMetadataObjectTypePDF417Code,

AVMetadataObjectTypeAztecCode,

AVMetadataObjectTypeInterleaved2of5Code,

AVMetadataObjectTypeITF14Code,

AVMetadataObjectTypeDataMatrixCode]];

*/

    // 8、设置扫面的预览界面
    AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
    previewLayer.frame = self.view.bounds;
    [self.view.layer insertSublayer:previewLayer atIndex:0];

    // 9、开始采集数据(由于扫描是一个持久过程,)
    [session startRunning];
}

6、实现上述第4步的代理方法

#pragma mark - AVCaptureMetadataOutputObjectsDelegate 实现这个代理方法,(这个代理里面就这一个方法)
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{
    // 扫描到数据之后会调用这个方法。因为调用非常频繁,所以判断,当捕获到数据之后,立即停止扫描
    if (metadataObjects.count > 0) {
        // 1、停止扫描
        [self.session stopRunning];

        // 2、移除预览界面
        [self.previewLayer removeFromSuperlayer];

        // 3、取出数据
        AVMetadataMachineReadableCodeObject *obj = [metadataObjects lastObject];
        NSString *str = obj.stringValue;
        NSLog(@"%@",str); // 这里的 str 字符串,就是扫面到得信息,一般为链接地址。

        // 4、停止扫描动画,显示数据。      根据扫描到的 链接地址 ,跳转到相应的界面,展示数据
    }

}
时间: 2024-12-29 17:21:04

ios开发之----扫描二维码、条形码的相关文章

iOS开发-定制多样式二维码

iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常见的二维码功能包括信息获取.网站跳转.电商交易.手机支付等等,其拥有密度小.信息容量大.容错能力强.成本低.制作难度低等优点.在移动开发中,二维码的地位也越来越重要,掌握二维码的基本操作是重要的本领之一. 在iOS7之后,苹果自身集成了二维码的生成和读取功能.生成二维码包括以下步骤 1.导入CoreIm

Android开发——通过扫描二维码,打开或者下载Android应用

Android开发——通过扫描二维码,打开或者下载Android应用 在实现这个功能的时候,被不同的浏览器折磨的胃疼,最后实现了勉强能用,也查考了一下其他人的博客 android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据 android/iPhone:如何从browser直接打开应用程序或者打开应用商店(如果没有应用程序) 1.Html页面(JS不在行,这个是其他人写的) 需要留意的是Android_URL,格式需要符合[scheme]://[host]/[path]?[

iOS- 详解如何使用ZBarSDK集成扫描二维码/条形码,点我!

1.前言 目前市场主流APP里,二维码/条形码集成主要分两种表现形式来集成: a. 一种是调用手机摄像头并打开系统照相机全屏去拍摄 b. 一种是自定义照相机视图的frame,自己控制并添加相关扫码指南 今天我就用ZBarSDK来实现上诉两种主流集成方式,与大家共同交流学习/ 2.第一步导入ZBarSDK 可以从github上下载好ZBarSDK,导入项目,并且导入相关iOS.framework 如图: 3.集成扫描二维码/条形码 3.1.调用手机摄像头并打开系统照相机全屏去拍摄 实现效果图: 1

如何用IOS原生API扫描二维码

写这篇文章的主要原因不是展示如何使用 AVFoundation 来进行二维码扫描,更主要的是限制扫描二维码的范围.(因为默认的是全屏扫描) copyright www.stuhack.com 项目遇到扫描二维码的功能需求,这里我放弃了使用三方库,而采用了苹果原生的扫描. 原生的好处就是扫描特别快效率特别高,但是遇到一个问题就是不知道怎么去限制扫描范围. 还是先简单说一下怎么使用来进行二维码扫描吧. 内容来自学生黑客联盟 首先是要用到的几个类 学生黑客联盟 www.stuhack.com @pro

iOS 扫描二维码,条形码的实现

#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>@property (weak, nonatomic) IBOutlet UILabel *captureLabel;@property(strong,nonatomic) AVCaptureSess

iOS开发——高级篇——二维码的生产和读取

一.二维码的生成 从iOS7开始集成了二维码的生成和读取功能此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤:导入CoreImage框架通过滤镜CIFilter生成二维码 二维码的内容(传统的条形码只能放数字):纯文本名片URL // 1. 实例化二维码滤镜 CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; // 2. 恢复滤镜的默认属性 [filter setDefaults];

Android开发之扫描二维码开发

原贴地址:http://www.cnblogs.com/Fndroid/p/5540688.html 二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这样的,可以放心的扫,这只是我的博客主页链接啦: 关于QR码编码的二维码,我们要知道几个特点: 1. 扫描时可以从各个角度去扫,也就是旋转多少度都没关系,不信吗?下次去肯德基买单试试咯. 2. 二维码有容错率,容错率越大,生成的二维码也就越复杂,但是越不容易出错,并且,当二维码被遮挡的时候也越容易扫描出来.这里我上

iOS开发之----生成二维码

- (void)viewDidLoad { [super viewDidLoad]; /* 注意: 1.生成二维码时, 不建议让二维码保存过多数据, 因为数据越多, 那么二维码就越密集,那么扫描起来就越困难 2.二维码有三个定位点, 着三个定位点不能被遮挡, 否则扫描不出来 3.二维码即便缺失一部分也能正常扫描出结果, 但是需要注意, 这个缺失的范围是由限制的, 如果太多那么也扫面不出来 */ // 1.创建滤镜 CIFilter *filter = [CIFilter filterWithNa

ZBar只扫描二维码/条形码

You can add these codes for ImageScanner scanner.setConfig(0, Config.ENABLE, 0); //Disable all the Symbols scanner.setConfig(Symbol.QRCODE, Config.ENABLE, 1); //Only QRCODE is enable scanner.setConfig(0, Config.ENABLE, 0); // scanner.setConfig(Symbol