ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。

二维码介绍:
 
 
 
二维码(QR(Quick Response)code),又称二维条码,最早起源于日本。
 
它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙。
 
二维码是一种比一维码更高级的条码格式。一维码只能在一个方向(一般是水平方向)上表达信息,
 
而二维码在水平和垂直方向都可以存储信息。一维码只能由数字和字母组成,而二维码能存储汉字、数字和图片等信息,
 
因此二维码的应用领域要广得多。
 
 
 
二维码需求:
 
 
 
开发一款二维码扫描插件,具有扫描大众二维码的能力,能够识别二维码当中包含的网页链接以及文本信息。对网页链接跳转safari浏览器(但是对自己公司的连接要求在app内部内置浏览器)。对扫描的内容弹出提示框。并且让别的app扫描我们自己的二维码的时候要跳转到appstore 下载
 
 
 
需求确认:
 
二维码算法自己写?不现实。开发周期太长,那就使用第三方那个库QR(Quick Response)code  ZBarSDK,读取信息的时候首先应该判断是不是网页连接,考虑用正则表达式对扫描的结果进行过滤。对于内置 浏览器使用webview控件。弹出提示框使用UIAlertView太麻烦,而且不好用,所以采用开源第三方库BlockAlertActionSheet,BlockAlertActionSheet使用block做的一款具有提示功能类似UIAlertView  UIActionSheet等控件。很强大,很实用。
 
 
 
二维码开发:
 
 
 
首先在github上下载ZBar SDK
 
地址https://github.com/bmorton/ZBarSDK
 
 
 
下载BlockAlertActionSheet,
 
新建一个test工程。在Main》storyboard上拖放一个button点击button开始扫描。
 
为button连接插座事件。
 
 
 
- (IBAction)btnClicked:(id)sender{
 
 
 
}
 
 
 
将ZBarSDK包含在项目工程当中。添加库:QuartzCore.framework ,CoreVideo.framework ,CoreMedia.framework,libiconv.dylib,CoreGraphics.framework。
 
 
 
将BlockAlertActionSheet包含在项目工程当中
 
 
 
在 WSQViewController.h中引入头文件。
 
 
 
#import "ZBarSDK.h"
 
#import "BlockAlertView.h"
 
遵循协议 ZBarReaderDelegate,
 
 
 
#pragma mark - ZBarReaderDelegate<UIImagePickerControllerDelegate>
 
- (void) readerControllerDidFailToRead: (ZBarReaderController*) reader
 
    withRetry: (BOOL) retry
 
    {
 
    }
 
    
 
    //二维码
 
- (void) imagePickerController: (UIImagePickerController*) reader
 
    didFinishPickingMediaWithInfo: (NSDictionary*) info
 
    {
 
  
 
}
 
 
 
定义实例变量:
 
 
 
ZBarReaderViewController *reader;
 
UIView* line; //二维码扫描线。
 
BOOL isBottom;
 
NSTimer* lineTimer;//二维码扫描线计时器。
 
 
 
 
 
自定义二维码扫描界面,(想法是这样的,先把reader原来的界面全部清空,然后自定义界面,因为ZBarSDK是分装好的静态库,)
 
 
 
 
 
-(void)setOverlayStyle:(ZBarReaderViewController *)reader_{
 
for (UIView *temp in [reader_.view subviews]){
 
for (UIButton* btn in [temp subviews]) {
 
if ([btn isKindOfClass:[UIButton class]]) {
 
[btn removeFromSuperview];
 
}
 
}
 
//去掉toolbar
 
for (UIToolbar* tool in [temp subviews]) {
 
if ([tool isKindOfClass:[UIToolbar class]]) {
 
[tool setHidden:YES];
 
[tool removeFromSuperview];
 
}
 
}
 
isBottom = NO;
 
//扫描线
 
 
 
line = [[UIView alloc] initWithFrame:CGRectMake(40, 105, 240, 2)];
 
line.backgroundColor = [UIColor greenColor];
 
[reader_.view addSubview:line];
 
 
 
lineTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(moveLine) userInfo:nil repeats:YES];
 
[lineTimer fire];
 
 
 
UIImage *scanningBg = [UIImage imageNamed:@"scanning-568h.png"];
 
 
 
CGSize size  = [UIScreen mainScreen].bounds.size;
 
UIImageView *scanningView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, size.width, size.height)];
 
scanningView.image = scanningBg;
 
[reader_.view addSubview:scanningView];
 
 
 
 
 
//用于取消操作的button
 
UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 
UIImage *bimage = [UIImage imageNamed:@"yellowButton.png"];
 
//[cancelButton setBackgroundImage:bimage forState:UIControlStateDisabled];
 
[cancelButton setBackgroundColor:[UIColor whiteColor]];
 
[cancelButton setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
 
[cancelButton setFrame:CGRectMake(20, size.height - 84, 280, 40)];
 
[cancelButton setTitle:@"取消" forState:UIControlStateNormal];
 
[cancelButton.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
 
[cancelButton addTarget:self action:@selector(dismissOverlayView:)forControlEvents:UIControlEventTouchUpInside];
 
 
 
[reader_.view addSubview:cancelButton];
 
 
 
}
 
}
 
 
 
//屏幕移动扫描线。
 
-(void)moveLine{
 
CGRect lineFrame = line.frame;
 
CGFloat y = lineFrame.origin.y;
 
if (!isBottom) {
 
isBottom = YES;
 
y=y+245.0;
 
lineFrame.origin.y = y;
 
[UIView animateWithDuration:1.5 animations:^{
 
line.frame = lineFrame;
 
}];
 
}else if(isBottom){
 
isBottom = NO;
 
y = y -245;
 
lineFrame.origin.y = y;
 
[UIView animateWithDuration:1.5 animations:^{
 
line.frame = lineFrame;
 
}];
 
}
 
}
 
 
 
// 点击cancel  button事件
 
- (void)dismissOverlayView:(id)sender{
 
[lineTimer invalidate];
 
[reader dismissModalViewControllerAnimated:YES];
 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值