iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二)

iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面()

上一篇解决了ZBarSDK不支持64bit的问题,下面我们就可以使用ZBarSDK了。

导入ZBarSDk.h文件

附上代码:

//

//  MeViewController.m

//  Auditory Blog

//

//  Created by 寒竹子 on 15/4/28.

//  Copyright (c) 2015年 寒竹子. All rights reserved.

//

#define ScanWidth  220

#define ScanHeight 220

#import "MeViewController.h"

#import "ZBarSDK.h"

@interface MeViewController ()<ZBarReaderDelegate>

@property (nonatomic, strong) UIImageView * imageView;

@property (nonatomic, strong) UIView * scanLine; // 扫描仪

@property (nonatomic, strong) NSTimer * timer;

@end

@implementation MeViewController

/**

* @brief  初始化UI

*

* @param

* @return

*/

- (void)setupUI

{

self.view.backgroundColor = RGB(248, 248, 248, 1.0f);

UIButton * scanBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 200, self.view.frame.size.width, 30)];

[scanBtn setTitle:@"扫描二维码" forState:UIControlStateNormal];

scanBtn.titleLabel.font = TextFont(16.0f);

[scanBtn setTitleColor:RGB(10, 10, 10, 1.0f) forState:UIControlStateNormal];

[scanBtn addTarget:self action:@selector(scanAction) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:scanBtn];

_imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 300, 200, 100)];

[self.view addSubview:_imageView];

}

/**

* @brief  起一个定时器

*

* @param

* @return

*/

- (void)startTimer

{

_timer = [NSTimer scheduledTimerWithTimeInterval:.02f target:self selector:@selector(updateScanLine) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

}

/**

* @brief  停止定时器

*

* @param

* @return

*/

- (void)stopTimer

{

if ([_timer isValid]) {

[_timer invalidate];

_timer = nil;

}

}

/**

* @brief  扫描二维码

*

* @param

* @return

*/

- (void)scanAction

{

ZBarReaderViewController * readerVc = [[ZBarReaderViewController alloc] init];

readerVc.readerDelegate = self;

// 非全屏

readerVc.wantsFullScreenLayout = NO;

// 隐藏底部控制按钮

readerVc.showsZBarControls = NO;

// 设置自己定义的界面

[self setOverlayPickerView:readerVc];

ZBarImageScanner * scanner = readerVc.scanner;

[scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0];

[self presentViewController:readerVc animated:YES completion:nil];

[self startTimer];

}

- (void)setOverlayPickerView:(ZBarReaderViewController *)readerVc

{

// 清除原有的控件

for (UIView * temp in [readerVc.view subviews]) {

for (UIButton * btn in [temp subviews]) {

if ([btn isKindOfClass:[UIButton class]]) {

[btn removeFromSuperview];

}

}

for (UIToolbar * toolBar in [temp subviews]) {

if ([toolBar isKindOfClass:[UIToolbar class]]) {

[toolBar setHidden:YES];

[toolBar removeFromSuperview];

}

}

}

// 画中间的基准线

_scanLine = [[UIView alloc] initWithFrame:CGRectMake((self.view.frame.size.width - ScanWidth) / 2.0f, (self.view.frame.size.height - ScanHeight) / 2.0f, ScanWidth, 1)];

_scanLine.backgroundColor = [UIColor redColor];

[readerVc.view addSubview:_scanLine];

// 最上部的View

UIView * upView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, (self.view.frame.size.height - ScanHeight) / 2.0f)];

upView.alpha = .4f;

upView.backgroundColor = [UIColor blackColor];

[readerVc.view addSubview:upView];

// 用于说明的label

UILabel * infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, self.view.frame.size.width - 40, 60)];

infoLabel.backgroundColor = [UIColor clearColor];

infoLabel.numberOfLines = 2;

infoLabel.font = TextFont(15.0f);

infoLabel.textColor = [UIColor whiteColor];

infoLabel.text = @"将二维码置于矩形方框内,离手机摄像头10CM左右,系统会自动识别。";

[upView addSubview:infoLabel];

// 左侧的view

UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(upView.frame), (self.view.frame.size.width - ScanWidth) / 2.0f, ScanHeight)];

leftView.alpha = 0.4;

leftView.backgroundColor = [UIColor blackColor];

[readerVc.view addSubview:leftView];

// 右侧的view

UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(CGRectGetMaxX(leftView.frame) + ScanWidth, leftView.frame.origin.y, (self.view.frame.size.width - ScanWidth) / 2.0f, ScanHeight)];

rightView.alpha = 0.4;

rightView.backgroundColor = [UIColor blackColor];

[readerVc.view addSubview:rightView];

//底部view

UIView * downView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetMaxY(leftView.frame), self.view.frame.size.width, self.view.frame.size.height - CGRectGetMaxY(leftView.frame))];

downView.alpha = 0.4;

downView.backgroundColor = [UIColor blackColor];

[readerVc.view addSubview:downView];

// 取消操作的按钮

UIButton * cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake((self.view.frame.size.width - 55) / 2.0f, 30, 70, 70.0f)];

[cancelBtn setImage:[UIImage imageNamed:@"close"] forState:UIControlStateNormal];

[cancelBtn addTarget:self action:@selector(closeAction) forControlEvents:UIControlEventTouchUpInside];

[downView addSubview:cancelBtn];

}

/**

* @brief  更新扫描

*

* @param

* @return

*/

- (void)updateScanLine

{

[UIView animateWithDuration:.01f animations:^{

CGFloat currentY = _scanLine.frame.origin.y;

if (currentY >= (self.view.frame.size.height - ScanHeight) / 2.0f + ScanHeight) {

currentY = (self.view.frame.size.height - ScanHeight) / 2.0f;

}else {

currentY += 1.0f;

}

CGRect frame = _scanLine.frame;

frame.origin.y = currentY;

_scanLine.frame = frame;

} completion:nil];

}

/**

* @brief  关闭扫描页面

*

* @param

* @return

*/

- (void)closeAction

{

[self stopTimer];

[self dismissViewControllerAnimated:YES completion:nil];

}

- (void)viewDidLoad {

[super viewDidLoad];

[self setupUI];

}

#pragma mark ZBarSDKDelegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults];

ZBarSymbol * symbol;

for(symbol in results)

break;

_imageView.image = [info objectForKey:UIImagePickerControllerOriginalImage];

[self stopTimer];

[picker dismissViewControllerAnimated:YES completion:nil];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:symbol.data]];

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

}

@end

至此ZBarSDK已经讲解完毕。

时间: 2024-10-19 06:48:23

iOS 开发之 ZBarSDK 二维码扫描自定义二维码扫描页面(二)的相关文章

iOS 开发之 ZBarSDK 二维码扫描 静态库不支持64bit完美解决(一)

由于ZBarSDK不支持arm64 bit,下面是自己进行编译打包生成支持64bit的.a文件的方法. 首先下载ZBarSDK,解压后打开iPhone的文件夹,删除Example文件夹.然后打开zbar.xcodeproject,设置工程编译环境为Release环境. 修改Standard Achived 为armv7 arm64,然后build.注意:先选择真机build,此时不需要插入真机.然后,在选择模拟器build. 得到两个.a文件. 最后一步: 将真机下得到的.a文件和模拟器下得到的

IOS开发之ZBarReaderView的使用

IOS开发之ZBarReaderView的使用 HOMEABOUTGUESTBOOKCATEGORIESTAGSLINKSSUBSCRIBE 当开发IOS程序中需要用到二维码识别功能的时候,zbar这个开源库估计会被不少人选择.但是关于zbar的用法,网上的资料大部分都集中在ZBarReaderViewController这个类的使用上.本人在使用中,发现ZBarReaderViewController这 个类使用很不灵活,比如,如果需要对界面做一些自定义的定制时会变得很麻烦.在zbar的头文件

iOS开发之多XIB之间相互关联

Xib link Xib 1.直接加载xib中的UIView 创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图: 由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None. 将下面代码放到viewDidLoad中: &1这行代码就是加载

iOS开发之MVVM在项目中的应用

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说到架构设计和团队

iOS开发之Socket通信实战--Request请求数据包编码模块

实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncSocket来进行长连接连接和传输数据,该第三方地 址:https://github.com/robbiehanson/CocoaAsyncSocket,读者可以自行google或者baidu搜索 这个库的用法,网上有很多资料,而且用法不难. 在一些对Socket通信使用需求不是很高的应用中,比如需要

IOS开发之copy的问题

copy的目的就是修改副本,修改原始对象和副本时不会产生干扰. 定义一个不可变属性A,再定义一个可变属性B.用B做添加删除等操作后再将B赋值给A时,有些人习惯用A = B:其实这样是不安全的. 假设有下面的一段代码: ? 1 2 3 4 5 6 7 8 9 10   int main() {    NSMutableString *strM = [NSMutableString [email protected]"123"];    NSString *str = strM;    N

李洪强iOS开发之Block和协议

李洪强iOS开发之Block和协议 OC语言BLOCK和协议 一.BOLCK (一)简介 BLOCK是什么?苹果推荐的类型,效率高,在运行中保存代码.用来封装和保存代码,有点像函数,BLOCK可以在任何时候执行. BOLCK和函数的相似性:(1)可以保存代码(2)有返回值(3)有形参(4)调用方式一样. 标识符 ^ (二)基本使用 (1)定义BLOCK变量 Int (^SumBlock)(int,int);//有参数,返回值类型为int Void (^MyBlock)()://无参数,返回值类型

李洪强iOS开发之iOS技术博客

李洪强iOS开发之iOS技术博客 注意:访问博客请直接点击博客,不要点击后面的RSS地址 博客地址 RSS地址 南峰子的技术博客   剑尖博客   图拉鼎   Henry Lee   Dev Talking(推荐)   岁寒   破船之家 http://beyondvincent.com/atom.xml NSHipster http://nshipster.cn/feed.xml Limboy 无网不剩 http://feeds.feedburner.com/lzyy 唐巧的技术博客(推荐)

李洪强iOS开发之iOS好文章收集

李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 nginx 和 rtmp 插件搭建视频直播和点播服务器 2015-05-12 20:13:00 iOS9适配技巧 图iOS9适配新技巧 2015-09-29 09:01 TextKit分页效果 图文混排 2015年6月1日 iPhone 6 / 6 Plus 设计·适配方案 屏幕适配 2014-11-2