一、把相应的URL生成二维码

利用有关图像变成的框架 #import <CoreImage/CoreImage.h>

步骤:实例化二维码滤镜---->恢复滤镜属性---->将字符串转化为data--->通过KVO设置滤镜---->滤镜将data生成二维码CIImage

    // 1.实例化二维码滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; // 2.恢复滤镜的默认属性 (因为滤镜有可能保存上一次的属性)
[filter setDefaults]; // 3.将字符串转化为data
NSData *data = [@"http://124.207.197.43:7080/OneBox/page/front/download.html" dataUsingEncoding:NSUTF8StringEncoding]; // 4.通过KVO设置滤镜, 传入data, 将来滤镜就知道要通过传入的数据生成二维码
[filter setValue:data forKey:@"inputMessage"]; // 5.生成二维码
CIImage *outputImage = [filter outputImage]; // 6.生成二维码图片
UIImage *image = [UIImage imageWithCIImage:outputImage];

二、扫描二维码

首先引入框架 #import <AVFoundation/AVFoundation.h>

步骤:实例化拍摄设备对象--->设置输入设备--->设置元数据输出(实例化对象和设置代理)--->添加拍摄会话(实例化对象,添加输入设备,添加输出元数据,设置输出元数据类型)--->设置视频预览图层(设置frame并添加)--->启动会话即开始扫描--->在元数据代理中得到扫描后的数据(由于多次调用这个代理,所以要先停下,并移除图层)

//
// ViewController.m
// 14-扫描二维码
//
// Created by apple on 14/11/11.
// Copyright (c) 2014年 heima. All rights reserved.
// #import "ViewController.h"
#import <AVFoundation/AVFoundation.h> @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
@property (nonatomic, strong) AVCaptureSession *session;
@property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; // 1. 实例化拍摄设备
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; // 2. 设置输入设备
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; // 3. 设置元数据输出
// 3.1 实例化拍摄元数据输出
AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
// 3.3 设置输出数据代理
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; // 4. 添加拍摄会话
// 4.1 实例化拍摄会话
AVCaptureSession *session = [[AVCaptureSession alloc] init];
// 4.2 添加会话输入
[session addInput:input];
// 4.3 添加会话输出
[session addOutput:output];
// 4.3 设置输出数据类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; self.session = session; // 5. 视频预览图层
// 5.1 实例化预览图层, 传递_session是为了告诉图层将来显示什么内容
AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer layerWithSession:_session]; preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
preview.frame = self.view.bounds;
// 5.2 将图层插入当前视图
[self.view.layer insertSublayer:preview atIndex:]; self.previewLayer = preview; // 6. 启动会话
[_session startRunning]; } - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
{ // 会频繁的扫描,调用代理方法
// 1. 如果扫描完成,停止会话
[self.session stopRunning];
// 2. 删除预览图层
[self.previewLayer removeFromSuperlayer]; NSLog(@"%@", metadataObjects); // 3. 设置界面显示扫描结果
if (metadataObjects.count > ) {
AVMetadataMachineReadableCodeObject *obj = metadataObjects[];
// 提示:如果需要对url或者名片等信息进行扫描,可以在此进行扩展!
// _label.text = obj.stringValue;
NSLog(@"%@", obj.stringValue);
}
} @end

也可以利用第三放已经写好的框架使用:《LBXScan》

这个面已经设置好了集中二维码扫描格式,很方便,但是集成起来需要好好看看代码。 扫描后输出结果在下面的方法里面得到

- (void)scanResultWithArray:(NSArray<LBXScanResult*>*)array
{ if (array.count < )
{
NSLog(@"无扫描结果"); return;
} //经测试,可以同时识别2个二维码,不能同时识别二维码和条形码
for (LBXScanResult *result in array) { NSLog(@"scanResult:%@",result.strScanned);
} LBXScanResult *scanResult = array[]; NSString*strResult = scanResult.strScanned; self.scanImage = scanResult.imgScanned; if (!strResult) { return;
} //震动提醒
[LBXScanWrapper systemVibrate];
//声音提醒
[LBXScanWrapper systemSound]; }

iOS 有关二维码的更多相关文章

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

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

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

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

  3. iOS - QRCode 二维码

    1.QRCode 在 iOS7 以前,在 iOS 中实现二维码和条形码扫描,我们所知的有,两大开源组件 ZBar 与 ZXing. 这两大组件我们都有用过,这里总结下各自的缺点: 1.ZBar 在扫描 ...

  4. iOS 7 二维码

    维码扫描 2014-06-13 10:20:29|  分类: iOS|举报|字号 订阅     下载LOFTER客户端     // //  TCTosweepScan.m //  TongCheng ...

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

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

  6. AJ学IOS 之二维码学习,快速打开相机读取二维码

    AJ分享,必须精品 上一篇文章写了怎么生成二维码,这儿就说说怎么读取吧,反正也很简单,iOS封装的太强大了 步骤呢就是这样: 读取二维码需要导入AVFoundation框架#import <AV ...

  7. AJ学IOS 之二维码学习,快速生成二维码

    AJ分享,必须精品 二维码是一项项目中可能会用到的,iOS打开相机索取二维码的速度可不是Android能比的...(Android扫描二维码要来回来回晃...) 简单不多说,如何把一段资料(网址呀,字 ...

  8. iOS 生成二维码

    首先先下载生成二维码的支持文件 libqrencode 添加依赖库 CoreGraphics.framework. QuartzCore.framework.AVFoundation.framewor ...

  9. iOS开发 二维码生成

    基于libqrencode的二维码生成 + (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size { ...

  10. iOS开发-二维码的基本使用

    二维码在生活中出现的频率越来越多了,大街小巷各个角落,它的出现更大的作用是代替功能单一的传统条形码,但是通常很多人第一次见到这个都不清楚这是干嘛用的.最初第一次见到可能就是买到的商品上有一个数字的条形 ...

随机推荐

  1. Spring Boot作为Spring Cloud基础设施

    spring cloud包含的核心特性: Distributed/versioned configuration(分布式配置) Service registration and discovery(服 ...

  2. 201771010123汪慧和《面向对象程序设计Java》第十六周实验总结

    一.理论部分 1.程序与进程的概念 ‐程序是一段静态的代码,它是应用程序执行的蓝本. ‐进程是程序的一次动态执行,它对应了从代码加载.执行至执行完毕的一个完整过程. ‐操作系统为每个进程分配一段独立的 ...

  3. Python String startswith() Method

    一,摘自官方API  https://docs.python.org/3/library/stdtypes.html#methods str.startswith(prefix[, start[, e ...

  4. lambda的题

    def num(): return [lambda x: i*x for i in range(4)] print([m(2) for m in num()]) 这个式子,lambda相当于闭包函数, ...

  5. 洛谷 P5663 加工零件

    题目传送门 解题思路: 最暴力的做法: bfs模拟,每次将一个阶段的所有点拿出来,将其所有直连的点都放进队列,知道本阶段结束,最后看1号点会不会在最后一个阶段被放入队列.(洛谷数据40分) 优化了一下 ...

  6. php速成_day3

    一.MySQL关系型数据库 1.什么是数据库 数据库 数据存储的仓库,在网站开发应用当中,需要有一些数据存储起来. 注册的用户信息,使用PHP变量只是一个临时的存储,如果需要永久的存储起来,就把数据存 ...

  7. C语言程序设计|05

    问题 回答 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/9772 我在 ...

  8. java求两个圆相交坐标

    最近由于项目需要,根据两个圆函数求出相交的坐标.实现代码如下,另感谢两圆求交点算法实现Java代码,虽然他所贡献的代码中存在问题,但仍有借鉴意义. 1.两个圆相交的数学求法 在中学数学中我们知道,一个 ...

  9. aws ec2 安装Elastic search 7.2.0 kibana 并配置 hanlp 分词插件

    文章大纲 Elastic search & kibana & 分词器 安装 版本控制 下载地址 Elastic search安装 kibana 安装 分词器配置 Elastic sea ...

  10. UML-如何创建领域模型?

    以当前迭代中所要设计的需求为界: 1.寻找概念类 2.将其绘制为类图 3.添加关联和属性