iOS 简单易用的二维码扫描及生成二维码三方控件LFQRCode,可灵活自定义UI
一、扫码
扫描的控件是一个view,使用者只需贴在自己的控制器内即可。其他UI用户可在自己控制器随便添加。代码如下
- (void)viewDidLoad {
[super viewDidLoad];
//扫描有效区(即框内透明区域)
CGRect interestRect = CGRectMake(, (self.view.frame.size.height - (self.view.frame.size.width - ))/2.0f, self.view.frame.size.width - , self.view.frame.size.width - );
//扫描控件
_scanView = [[LFQRCodeScanner alloc] initWithFrame:self.view.bounds rectOfInterest:interestRect];
_scanView.imgLine.image = [UIImage imageNamed:@"line"];
_scanView.scanFilishBlock = ^(AVMetadataMachineReadableCodeObject *result) {
NSLog(@"扫描结果:%@",result.stringValue);
};
[self.view insertSubview:_scanView atIndex:];//将扫描view放到底层
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear: animated];
[self.scanView start];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear: animated];
[self.scanView stop];
}
二、生成二维码

1.生成二维码调一个方法即可,颜色和logo可不传
UIImage *imageCode = [LFQRCodeUtil createQRimageString:self.tfInput.text sizeWidth: fillColor:self.selectedColor logo:self.ivLogo.image];
2.生成二维码,带阴影只需要给你的UIImageView加阴影即可,注意:UIImageView要是背景透明的。
//生成二维码
- (IBAction)creatCode:(id)sender {
UIImage *imageCode = [LFQRCodeUtil createQRimageString:self.tfInput.text sizeWidth: fillColor:self.selectedColor logo:self.ivLogo.image];
self.ivCodeResult.image = imageCode; self.ivCodeResult.layer.shadowOffset = CGSizeMake(self.sliderShadow.value, self.sliderShadow.value); // 设置阴影的偏移量
self.ivCodeResult.layer.shadowRadius = ; // 设置阴影的半径
self.ivCodeResult.layer.shadowColor = [UIColor blackColor].CGColor; // 设置阴影的颜色为黑色
self.ivCodeResult.layer.shadowOpacity = 0.4; // 设置阴影的不透明度
}
3.保存不带阴影的二维码,很简单,只需要将self.ivCodeResult.image存到相册即可。
//保存
UIImageWriteToSavedPhotosAlbum(self.ivCodeResult.image, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);

4.保存带阴影的二维码。不能直接保存self.ivCodeResult.image,因为阴影属于self.ivCodeResult,而不属于self.ivCodeResult.image。然后我想到对self.ivCodeResult截屏,然而截屏的二维码缝隙是黑色的,是因为self.ivCodeResult背景透明。那么我想到给self.ivCodeResult增加一个背景为白色的父视图,然后对这个父视图截屏。虽然得到了我想要的样子,然而这个截屏的尺寸太小了,还是不太理想。于是想到用一个frame较大的临时UIImageView存放二维码,及一个frame较大的临时白色父视图。然后对这个大的白色父视图截屏。
//保存
- (IBAction)saveCode:(id)sender {
//Frame较大的临时图片用于截图(不直接截图ivCodeResult,是因为ivCodeResult的Frame太小)
UIImageView *tempImageView = [[UIImageView alloc] initWithFrame:CGRectMake(, , self.ivCodeResult.image.size.width, self.ivCodeResult.image.size.height)];
tempImageView.backgroundColor = [UIColor clearColor];//注意:背景透明才会有阴影
tempImageView.layer.shadowOffset = CGSizeMake(self.sliderShadow.value * [UIScreen mainScreen].scale, self.sliderShadow.value * [UIScreen mainScreen].scale); // 设置阴影的偏移量
tempImageView.layer.shadowRadius = self.sliderShadow.value * [UIScreen mainScreen].scale; // 设置阴影的半径
tempImageView.layer.shadowColor = [UIColor blackColor].CGColor; // 设置阴影的颜色为黑色
tempImageView.layer.shadowOpacity = 0.5; // 设置阴影的不透明度
tempImageView.image = self.ivCodeResult.image; //因为tempImageView是透明背景,这里不能直接截图tempImageView,否则会出现空隙部分是黑色。处理办法是将tempImageView放到另一个tempView中且tempView不能透明,然后保存tempView的截图
UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(, , self.ivCodeResult.image.size.width, self.ivCodeResult.image.size.height)];
tempView.backgroundColor = [UIColor whiteColor];
[tempView addSubview:tempImageView]; //截图
UIGraphicsBeginImageContextWithOptions(tempView.bounds.size, YES, );
[tempView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext(); //保存
UIImageWriteToSavedPhotosAlbum(image, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
}

源码地址:https://github.com/zhanglinfeng/LFQRCode
支持cocoaPods
pod 'LFQRCode' (推荐)
2017.12.25修改:
这只是LFKit的一个子库,LFKit地址https://github.com/zhanglinfeng/LFKit
以后只在LFKit中维护了
只需LFQRCode的 pod 'LFKit/Component/LFQRCode'
需要LFKit中所有自定义控件的pod 'LFKit/Component'
需要总库的 pod 'LFKit'
iOS 简单易用的二维码扫描及生成二维码三方控件LFQRCode,可灵活自定义UI的更多相关文章
- iOS 原生二维码扫描和生成
代码地址如下:http://www.demodashi.com/demo/12551.html 一.效果预览: 功能描述:WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描工 ...
- iOS开发技术 - 二维码扫描、生成
QRecLevel:QR_ECLEVEL_H // 二维码容错率,最高为30%(即QR_ECLEVEL_H),即LOGO有大 ...
- Android二维码扫描、生成
Android二维码扫描.生成 现在使用二维码作为信息的载体已经越来越普及,那么二维码的生成以及扫描是如何实现的呢 google为我们提供了zxing开源库供我们使用 zxing GitHub源码地址 ...
- 二维码相关---java生成二维码名片,而且自己主动保存到手机通讯录中...
版权声明:本文为博主原创文章,未经博主credreamer 同意不得转载 违者追究法律责任. https://blog.csdn.net/lidew521/article/details/244418 ...
- 学习方法和阶段介绍 、 iOS界面开发引入 、 构造第一个App 、 视图控制器和视图 、 控件与事件 、 InterfaceBuilder
1 创建并运行第一个App 1.1 问题 使用Xcode创建一个App项目,该应用实现功能在界面上显示Hello World标签,在模拟器中的运行结果如图-1所示: 图-1 1.2 方案 分析图-1, ...
- fastscript增加三方控件之二
fastscript增加三方控件之二 unit fs_BsDataSet; interface {$i fs.inc} uses SysUtils, Classes, fs_iinterpreter, ...
- jquery.qrcode.js生成二维码(前端生成二维码)
官网地址:http://jeromeetienne.github.io/jquery-qrcode/ 第一步引入插件: <script type='text/javascript' src='h ...
- Swift:使用系统AVFoundation实现二维码扫描和生成
系统提供的AVCaptureSession仅仅适用于iOS7.0以上的系统.之前的请用Zbar来替代 下载地址:http://download.csdn.net/detail/huobanbengku ...
- Swift AVFoundation 二维码扫描和生成
项目最终不须要支持iOS6了(泪崩),在二维码扫描这一块,可以全然的放弃ZXing库,改用系统的AVFoundation了,拿swift写了个Demo,效果例如以下: github地址:点这里 有关A ...
随机推荐
- Sencha Touch MVC 中 store 的使用
I have a UserStore that I want to load after succesful login of a user. I can't get this to work i.e ...
- 转:RBAC权限控制
名词解释: RBAC:Role-Based Access Control,基于角色的访问控制 关键词: RBAC,Java Shiro,Spring Security, 一. RBAC 要解决 ...
- 有关javamelody的配置
一:前沿 在这里我学到了怎么来使用开源的东西,也第一次去接触有关性能方面检测的开源框架,javamelody是性能检测的,刚刚看的时候我什么都不知道的,但是自己接触了,才知道一点大概思路吧.下面来记载 ...
- [object-c 2.0 程序设计]object-c review (一)
// // main.m // cmdTry // // Created by Calos Chen on 2017/8/21. // Copyright © 2017年 Calos Chen. Al ...
- 【洛谷 P1645】 序列 (差分约束)
题目链接 差分约束. 设\(s[i]\)表示前\(i\)个位置有多少个数,那么对于一个限制条件\((L,R,C)\),显然有 \[s[R]-s[L-1]>=C\] 于是连一条\(L-1\)到\( ...
- bzoj 1942 斜率优化DP
首先我们贪心的考虑,对于某一天来说,我们只有3中策略,第一种为不做任何行动,这时的答案与前一天相同,第二种为将自己的钱全部换成a,b货币,因为如果换a,b货币,代表在之后的某一天卖出去后会赚钱,那么当 ...
- Smith-Waterman算法及其Java实现
Smith-Waterman算法是1981年Smith和Waterman提出的一种用来寻找并比较具有局部相似性区域的动态规划算法,很多后来的算法都是在该算法的基础上发展的.这是一种两序列局部比对算法, ...
- js 函数分类2
js 通用监听函数实现 // 把所有方法封装到一个对象里面,充分考虑兼容写法 var EventUtil = { // 添加DOM事件 addEvent: function(element, type ...
- mysql索引语法及示例
注:本篇文章是对菜鸟教程中的mysql索引(http://www.runoob.com/mysql/mysql-index.html)的翻译版本:添加了示例,便于理解: 索引分单列索引和组合索引.单列 ...
- 病毒&烦人的幻灯片
<病毒>传送门 <烦人的幻灯片>传送门 病毒 描述 有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改 ...