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

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

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

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

二、扫描二维码

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

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

  1. //
  2. // ViewController.m
  3. // 14-扫描二维码
  4. //
  5. // Created by apple on 14/11/11.
  6. // Copyright (c) 2014年 heima. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10. #import <AVFoundation/AVFoundation.h>
  11.  
  12. @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>
  13. @property (nonatomic, strong) AVCaptureSession *session;
  14. @property (nonatomic, strong) AVCaptureVideoPreviewLayer *previewLayer;
  15. @end
  16.  
  17. @implementation ViewController
  18.  
  19. - (void)viewDidLoad {
  20. [super viewDidLoad];
  21.  
  22. // 1. 实例化拍摄设备
  23. AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
  24.  
  25. // 2. 设置输入设备
  26. AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
  27.  
  28. // 3. 设置元数据输出
  29. // 3.1 实例化拍摄元数据输出
  30. AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];
  31. // 3.3 设置输出数据代理
  32. [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
  33.  
  34. // 4. 添加拍摄会话
  35. // 4.1 实例化拍摄会话
  36. AVCaptureSession *session = [[AVCaptureSession alloc] init];
  37. // 4.2 添加会话输入
  38. [session addInput:input];
  39. // 4.3 添加会话输出
  40. [session addOutput:output];
  41. // 4.3 设置输出数据类型,需要将元数据输出添加到会话后,才能指定元数据类型,否则会报错
  42. [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];
  43.  
  44. self.session = session;
  45.  
  46. // 5. 视频预览图层
  47. // 5.1 实例化预览图层, 传递_session是为了告诉图层将来显示什么内容
  48. AVCaptureVideoPreviewLayer *preview = [AVCaptureVideoPreviewLayer layerWithSession:_session];
  49.  
  50. preview.videoGravity = AVLayerVideoGravityResizeAspectFill;
  51. preview.frame = self.view.bounds;
  52. // 5.2 将图层插入当前视图
  53. [self.view.layer insertSublayer:preview atIndex:];
  54.  
  55. self.previewLayer = preview;
  56.  
  57. // 6. 启动会话
  58. [_session startRunning];
  59.  
  60. }
  61.  
  62. - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
  63. {
  64.  
  65. // 会频繁的扫描,调用代理方法
  66. // 1. 如果扫描完成,停止会话
  67. [self.session stopRunning];
  68. // 2. 删除预览图层
  69. [self.previewLayer removeFromSuperlayer];
  70.  
  71. NSLog(@"%@", metadataObjects);
  72.  
  73. // 3. 设置界面显示扫描结果
  74. if (metadataObjects.count > ) {
  75. AVMetadataMachineReadableCodeObject *obj = metadataObjects[];
  76. // 提示:如果需要对url或者名片等信息进行扫描,可以在此进行扩展!
  77. // _label.text = obj.stringValue;
  78. NSLog(@"%@", obj.stringValue);
  79. }
  80. }
  81.  
  82. @end

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

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

  1. - (void)scanResultWithArray:(NSArray<LBXScanResult*>*)array
  2. {
  3.  
  4. if (array.count < )
  5. {
  6. NSLog(@"无扫描结果");
  7.  
  8. return;
  9. }
  10.  
  11. //经测试,可以同时识别2个二维码,不能同时识别二维码和条形码
  12. for (LBXScanResult *result in array) {
  13.  
  14. NSLog(@"scanResult:%@",result.strScanned);
  15. }
  16.  
  17. LBXScanResult *scanResult = array[];
  18.  
  19. NSString*strResult = scanResult.strScanned;
  20.  
  21. self.scanImage = scanResult.imgScanned;
  22.  
  23. if (!strResult) {
  24.  
  25. return;
  26. }
  27.  
  28. //震动提醒
  29. [LBXScanWrapper systemVibrate];
  30. //声音提醒
  31. [LBXScanWrapper systemSound];
  32.  
  33. }

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. VS常用高效快捷键

    快捷键的使用能够提供我们写代码的效率.还能装逼(哈哈O(∩_∩)O~) 类别 快捷键 描述 编辑 Ctrl+S 保存(养成好习惯,停下来的时候就保存下,不然遇见突发情况会很崩溃的) Ctrl+Shif ...

  2. 一天一个设计模式——Bridge桥接模式

    一.概念准备 在理解桥接模式之前,先要理解面向对象程序设计中的两个概念: 类的功能层次结构:假设现在有一个类Something,这个类有一些成员属性和成员方法,但是现有的功能不能满足要求,因此我们想扩 ...

  3. Arduino学习——u8glib库资料整理

    第一部分,u8glib标准语法格式: 本文使用的是DFRobot出品的LCD12864 Shield V1.0 端口占用情况: SPI Com: SCK = 13, MOSI = 11, CS = 1 ...

  4. hook键盘钩子_非dll

    unit Unit1; // download by http://www.codefans.net interface uses Windows, Messages, SysUtils, Class ...

  5. ES6 之 数值扩展

    1.ES5 // Number类型重写了valueOf() toLocaleString() toString('进制')方法 let a = 10 console.log(a.valueOf()); ...

  6. webapi 传入参数校验

    /// <summary> /// 传入参数校验过滤器 /// </summary> public class ValidateReqModelFilter : ActionF ...

  7. 72)MFC测试动态共享库

    动态共享库: 首先我建立一个新的动态库: 然后不选择空项目了,因为我们普通的cpp文件 入口是main  win32入口是winmain  那么这个动态库的入口在哪里  我们就是为了看一看: 出来这样 ...

  8. Vmware 困惑点记录和解释

    个人理解,如果有不同见解,麻烦请留言,一起进行探讨: DRS和HA是两个独立的功能. 准入控制只是保障有资源打开故障后迁移来的虚拟机,就算自身已经超过切换的阈值了,HA也是可以迁移过去的. 虚拟机允许 ...

  9. VUE,index key v-for

    列表渲染语法  v-forv-for 循环对象 <article v-for="(item, key, index) of info">{{item}} {{key}} ...

  10. 运行roscore出现unable to contact my own server无法启动小海龟的部分故障问题解决

    运行roscore后,出现下图这种情况(unable to contact my own server) 原因是找不到http://后面那些,ping不到域名或IP. 参考http://www.ros ...