iOS ZBar扫码简单实现
导入ZBarSDK文件并引入一下框架
AVFoundation.framework
CoreMedia.framework
CoreVideo.framework
QuartzCore.framework
libiconv.dylib
引入头文件#import “ZBarSDK.h”即可使用
当找到条形码时,会执行代理方法
废话不多说,直接上代码
//
// LQXZBarViewController.m
// erweim
//
// Created by 刘祺旭 on 15/9/9.
// Copyright (c) 2015年 刘祺旭. All rights reserved.
//
import "LQXZBarViewController.h"
@interface LQXZBarViewController ()
{
BOOL is_Anmotion;
ZBarReaderViewlqxreadview;
UIImageViewlqxscanZomeBack;
UIImageView*lqxreadLineView;
}
@end
@implementation LQXZBarViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self InitScan];
[self loopDrawLine];
}
pragma mark 初始化扫描
(void)InitScan
{
lqxreadview = [ZBarReaderView new];
lqxreadview.backgroundColor = [UIColor clearColor];
lqxreadview.frame = CGRectMake(187.5 - 150, 333.5 - 150, 300, 300);
lqxreadview.readerDelegate = self;
lqxreadview.allowsPinchZoom = YES;//使用手势变焦
lqxreadview.trackingColor = [UIColor redColor];
lqxreadview.showsFPS = NO;// 显示帧率 YES 显示 NO 不显示
lqxreadview.scanCrop = CGRectMake(50, 50, 50, 50);//将被扫描的图像的区域UIImage *hbImage=[UIImage imageNamed:@"框.png"];
lqxscanZomeBack=[[UIImageView alloc] initWithImage:hbImage];
//添加一个背景图片
CGRect mImagerect=CGRectMake((lqxreadview.frame.size.width-200)/2.0, (lqxreadview.frame.size.height-200)/2.0, 200, 200);
[lqxscanZomeBack setFrame:mImagerect];
lqxreadview.scanCrop = [self getScanCrop:mImagerect readerViewBounds:lqxreadview.bounds];//将被扫描的图像的区域[lqxreadview addSubview:lqxscanZomeBack];
[lqxreadview addSubview:lqxreadLineView];
[self.view addSubview:lqxreadview];
[lqxreadview start];
}
pragma mark 获取扫描区域
-(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds
{
CGFloat x,y,width,height;
x = rect.origin.x / readerViewBounds.size.width;
y = rect.origin.y / readerViewBounds.size.height;
width = rect.size.width / readerViewBounds.size.width;
height = rect.size.height / readerViewBounds.size.height;
return CGRectMake(x, y, width, height);
}
pragma mark 扫描动画
-(void)loopDrawLine
{
CGRect rect = CGRectMake(lqxscanZomeBack.frame.origin.x, lqxscanZomeBack.frame.origin.y, lqxscanZomeBack.frame.size.width, 2);
if (lqxreadLineView) {
[lqxreadLineView removeFromSuperview];
}
lqxreadLineView = [[UIImageView alloc] initWithFrame:rect];
lqxreadLineView.backgroundColor = [UIColor redColor];
[lqxreadLineView setImage:[UIImage imageNamed:@"线.jpg"]];
[UIView animateWithDuration:3.0
delay: 0.0
options: UIViewAnimationOptionCurveEaseIn
animations:^{
//修改fream的代码写在这里
lqxreadLineView.frame =CGRectMake(lqxscanZomeBack.frame.origin.x, lqxscanZomeBack.frame.origin.y+lqxscanZomeBack.frame.size.height, lqxscanZomeBack.frame.size.width, 2);
[lqxreadLineView setAnimationRepeatCount:0];
}
completion:^(BOOL finished){
if (!is_Anmotion) {
[self loopDrawLine];
}
}];
[lqxreadview addSubview:lqxreadLineView];
}
pragma mark 获取扫描结果
(void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
{
// 得到扫描的条码内容
const zbar_symbol_t *symbol = zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);
NSString *symbolStr = [NSString stringWithUTF8String: zbar_symbol_get_data(symbol)];
if (zbar_symbol_get_type(symbol) == ZBAR_QRCODE) {[[UIApplication sharedApplication] openURL:[NSURL URLWithString:symbolStr]];
}
for (ZBarSymbol *symbol in symbols) {
break;
}[readerView stop];
is_Anmotion = YES;
[readerView removeFromSuperview];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
iOS ZBar扫码简单实现的更多相关文章
- ios zxing扫码问题
在ios 中 扫瞄二维码,条形码基本有 2中第三方的库,一个是zbar 一个是zxing,zxing 在android中表现的比较出色,但是在ios 中不是很好用,扫瞄效率低,我们一般都用zbar,但 ...
- ios ZBar扫二维码奇奇怪怪的错误
Undefined symbols for architecture armv7: "_CVPixelBufferGetHeight", referenced from: -[ZB ...
- ionic3 实现扫码功能
ionic3 通过插件phonegap-plugin-barcodescanner,调用机器硬件摄像头实现扫码功能. 首先当然先了解下 phonegap-plugin-barcodescanner,这 ...
- 最简单的基于FFmpeg的移动端例子:IOS 视频转码器
===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...
- 安卓扫码:简单的ZXing使用记录
ZXing是Google提供的条形码.二维码等的生成.解析的库.最近工作需求去研究了一下,主要是研究怎么扫描二维码(QRCode).网上教程也不少,但大多看了不明所以,甚至看了半天都不知道解码到底从哪 ...
- iOS Swift WisdomScanKit二维码扫码SDK,自定义全屏拍照SDK,系统相册图片浏览,编辑SDK
iOS Swift WisdomScanKit 是一款强大的集二维码扫码,自定义全屏拍照,系统相册图片编辑多选和系统相册图片浏览功能于一身的 Framework SDK [1]前言: 今天给大家 ...
- iOS开发——iOS7(及以后版本) SDK自带二维码(含条形码)扫码、二维码生成
本文转载至 http://www.cnblogs.com/leotangcn/p/4357907.html 现在很多APP都涉及了二维码扫码功能,这个功能简单实用,很多情况下用户乐于使用,现在本文带来 ...
- 最简单的基于FFmpeg的移动端样例:IOS 视频转码器
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 通过扫码打开IOS的App Store下载APP(Android版暂时没找到解决方法)
项目需求:扫码根据不同平台下载不同版本的APP.主要是ios和Android. 网上找了很多,前面判断平台的代码很容易找到,但是后面的就有些坑了.有的人的是根本跑不通.有的是代码补全. 下面是 微信扫 ...
随机推荐
- 【中国剩余定理】 poj 1006
生理周期 简单模拟 对于超出23 * 28 * 33(21252)时进行求余运算即可. #include<stdio.h> int main() { //freopen("in ...
- OpenGL—Android 开机动画源码分析一
.1 Android开机动画实现方式目前实现Android开机动画的方式主要是逐帧动画和OpenGL动画. ?逐帧动画 逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的 ...
- weak和assign区别
weak比assign多了一个功能,当对象消失后自动把指针变成nil haofanazenmeban[4002:406590] controller:<SecondViewController: ...
- SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3, 由于出现错误 00002ef3 
项目使用的是tomcat7 ,浏览器是ie11 突然打开浏览器发现不能获取数据了 tomcat conf server.xml 文件 <Connector port="8080&quo ...
- [转]于Fragment和Activity之间onCreateOptionsMenu的问题
Fragment和Activity一样,可以重写onCreateOptionsMenu方法来设定自己的菜单,其实这两个地方使用onCreateOptionsMenu的目的和效果都是完全一样的,但是由于 ...
- Unity3D项目优化(转)
前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...
- 给input元素添加float. 去除IE6 下input的空隙
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- java 缓冲流
english.txt The arrow missed the target. They rejected the union demand. Where does this road go to? ...
- 学习笔记——Windows下cocos2d-x,eclipse中自编译
cocos2d-x创建的安卓项目导入eclipse后. 在项目属性中配置Builders. 在eclipse编译还需要配置相应的变量,即后面提到的cygwin编译中要添加的变量. D:/cygdriv ...
- Nginx代理外网映射
外网映射内网端口8080, 外网访问使用端口8379: nginx监听8080和80端口 #user nobody; worker_processes ; #error_log logs/error. ...