IOS 自定义ZbarSDK扫描界面

#1引用ZbarSDK

*1)到ZbarSDK开源Github下载zip文件,https://github.com/arciem/ZBarSDK


*2)使用Xcode4.6.3建立一个single view application project,项目名为"iOS自定义zbarsdk扫描界面"

      (为方便测试,使用Xcode4.6.3,如果使用Xcode5以上版本的要注意target和iOS版本问题和屏幕大小等界面问题)


*3)将解压后的ZbarSDK文件夹(其它文件不需要)复制到新建的项目下


*4)优化ZbarSDK文件夹,直接将文件夹里的resources文件夹删除


*5)将新添加的ZbarSDK文件夹添加到项目下,右击项目名------add file to,选择ZbarSDK

*6)添加ZbarSDK依赖的框架

      * AVFoundation.framework

      * CoreMedia.framework

      * CoreVideo.framework

      * QuartzCore.framework

      * libiconv.dylib

      
*
7)右击product------build for testing,如果出现如下错误(使用Xcode4.6.3以上版本会出现此问题)

      ZBarSDK/libzbar.a' for architecture armv7s clang: error: linker command failed with exit code 1 (use -v to see invocation)

      解决方法为:点击项目名------build settings------查找valid architectures后双击并删除armv7s即可

      再次右击product------build for testing,没有错误即引用ZbarSDK成功


#2自定义ZbarSDK扫描界面

*1)打开storyboard,使用3.5英寸的屏幕,添加一个view到视图view上(铺满)
      将这个view的Custom Class设为ZbarReaderView(这个视图将作为扫描界面)
      将ZbarReaderView作为OutLet输出
      (连线到viewconttroller.h文件,命名为readerView,并添加zbarsdk.h头文件的引用),接着将这两个view的颜色都设为ClearColor
                                       

*2)载入ZBarReaderView类,在appdelegate.m文件的application:didFinishLaunchingWithOptions:方法里加入代码:

      [ZBarReaderView class],并添加import语句:#import "ZBarSDK.h"

	#import "AppDelegate.h"
	#import "ZBarSDK.h"
	@implementation AppDelegate
	- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    		[ZBarReaderView class];
    		return YES;
	}

      在viewcontroller.m实现以下两个方法

	- (void)viewDidAppear:(BOOL)animated{
		//开启扫描
		[self.readerView start];
	}
	-(void)viewDidDisappear:(BOOL)animated{
		//关闭扫描
		[self.readerView stop];
	}
          

*3)添加边框,在view上再添加四个view,并设置颜色为50%透明度的BackColor
      (选择BackGround------BackColor------再次选择Other------设置透明度为50%)
      设置第一个view的大小位置为(306,0,14,242),第二个view的大小位置为(14,  0,292,  14)
      设置第三个view的大小位置为(0    ,0,14,242),第四个view的大小位置为(0,242,320,218)
      此时可以运行程序看一下效果,如图一所示

*4)添加四个角的直角边框,方法同上,颜色为白色,再在下方任意添加一些按钮来美化界面,再添加红色基准线,并让其闪动

      具体可查看代码,结果如图二所示

	//定时器使基准线闪动
	[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(lineAnimation) userInfo:nil repeats:YES];
	-(void)lineAnimation{
    		float x = self.redLine.frame.origin.x;
    		float y = self.redLine.frame.origin.y;
    		float xSize = self.redLine.frame.size.width;
    		if (upOrdown == NO) {
        		self.redLine.frame = CGRectMake(x, y, xSize, 0.3);
        		upOrdown = YES;
    		}
    		else {
        		self.redLine.frame = CGRectMake(x, y, xSize, 0);
        		upOrdown = NO;
    		}//upOrdown变量在ViewController.h声明
	}
*5)在底部添加一个TextView,命名为scanResult,设置背景颜色为ClearColor,字体颜色为白色,并添加OutLet输出,用作显示扫描结果
      接着实现ZBarReaderViewDelegate协议,在viewcontroller.h文件实现ZBarReaderViewDelegate协议
      在viewcontroller.m文件实现协议方法readerView:didReadSymbols:romImage:以获取扫描结果并显示到TextView上
      具体可参考代码,运行扫描结果如图三所示

	- (void) readerView: (ZBarReaderView*) view didReadSymbols: (ZBarSymbolSet*) syms fromImage: (UIImage*) img{
   		//处理扫描结果
   	 	ZBarSymbol *sym =nil;
    		for(sym in syms)
        		break;
    		//停止扫描
    		[self.readerView stop];
    		//扫描结束,移除红线并显示结果
    		[self.redLine removeFromSuperview];
    		self.scanResult.text = sym.data;
	}
*6)优化扫描界面,定义一个 initscan方法并在ViewDidLoad方法执行以初始化扫描界面
      包括不显示跟踪框(已有红色闪动基准线),关闭闪光灯(iOS7下会一直打开),设置拍摄屏幕大小和设置扫描区域大小
      最终运行扫描结果如图四所示

	- (void)initScan{
    		//不显示跟踪框
    		_readerView.tracksSymbols = NO;
    		//关闭闪关灯
    		_readerView.torchMode = 0;
    		//二维码拍摄的屏幕大小
    		CGRect rvBounsRect = CGRectMake(0, 0, 320, [UIScreen mainScreen].bounds.size.height);
    		//二维码拍摄时,可扫描区域的大小
    		CGRect scanCropRect = CGRectMake(0, 0, 320, 240);
    		//设置ZBarReaderView的scanCrop属性,默认范围是0~1,使用getScanCrop进行转换
    		_readerView.scanCrop = [self getScanCrop:scanCropRect readerViewBounds:rvBounsRect];
	}
	//设置可扫描区的scanCrop的方法
	- (CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)rvBounds{
   		CGFloat x,y,width,height;
    		x = rect.origin.y / rvBounds.size.height;
    		y = 1 - (rect.origin.x + rect.size.width) / rvBounds.size.width;
    		width = (rect.origin.y + rect.size.height) / rvBounds.size.height;
    		height = 1 - rect.origin.x / rvBounds.size.width;
    		return CGRectMake(x, y, width, height);
	}

#3其它

*1)ZbarSDK无需在模拟器上进行测试,可以扫描多种二维码和条形码,请在真机上测试和使用

*2)程序代码下载,内附两张二维码图片   http://download.csdn.net/detail/u010520912/7116643

*3)API 文档 http://zbar.sourceforge.net/iphone/sdkdoc/index.html







  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值