关于Zbar扫描
http://supershll.blog.163.com/blog/static/370704362012112843817769/
ZBar的简单使用
http://blog.csdn.net/ioselite/article/details/24264481
代码需要用到扫码,找了找ZXing和ZBar,自我感觉ZBar要略胜一筹。现在就记录下如何使用ZBar
第一步,找地方下载ZBarSDK,例如GitHub(https://github.com/bmorton/ZBarSDK),或者Code4App (http://code4app.com/ios/ZBar-Barcode-Reader/4fa23f3f06f6e7ee18000000),不过GitHub上没有Document文档,他让去官网看,但是连不上-_-! Code4App里有文档,下载好了的
第二步,将ZBarSDK文件夹加入copy到工程中(这一点和Zxing不一样),包括Headers文件夹和libzbar.a,然后按照官方文档说明加入一些Framework: AVFoundation.framework (weak)、CoreMedia.framework (weak)、 CoreVideo.framework (weak)、 QuartzCore.framework、 libiconv.dylib。
第三步,使用:使用起来就很简单了。
1)首先 #import "ZBarSDK.h"
2) 在需要调出扫描界面的地方 使用如下代码:
ZBarReaderViewController *reader = [[ZBarReaderViewController alloc]init];
reader.readerDelegate=self; //self需要实现ZBarReaderDelegate协议
reader.supportedOrientationsMask = ZBarOrientationMaskAll;
ZBarImageScanner *scanner = reader.scanner;
// TODO: (可选) 配置reader的一些参数
// 例如: 禁用很少使用的I2/5来改善性能
[scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0];
// present and release the controller
[self presentModalViewController: reader animated: NO];//这里例子给的是YES,但是测试的时候发现虽然NO出来不太好,但是如果是动画出来的话,扫描结果出来过快的话,会Dismiss Controller失效,猜想是还没有Present出来就Dismiss的原因。所以个人感觉使用NO会好一点
[reader release];
说明:ZBarReaderViewController是继承的UIImagePickerController, ZBarReaderDelegate协议也是继承的UIImagePickerControllerDelegate协议(它自己又添加了一个可选方法,可以Command+左键 点进去看看)
3)最后,实现代理方法
- (void) imagePickerController: (UIImagePickerController*)reader didFinishPickingMediaWithInfo: (NSDictionary*) info
{
// ADD: 获取解码结果
id<NSFastEnumeration> results =[info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results) {
// 例子: 只获取第一个BarCode
break;
}
//处理中文乱码问题
NSString *resultStr=symbol.data;
if ([resultStr canBeConvertedToEncoding:NSShiftJISStringEncoding]) {
resultStr = [NSString stringWithCString:[resultStr cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding];
}
// 例子: 处理文本结果
resultText.text = resultStr;
// 例子: 处理barcode图片
resultImage.image = [info objectForKey: UIImagePickerControllerOriginalImage];
// ADD: dismiss the controller
[self dismissModalViewControllerAnimated: YES];
}
好了,如果只是简单的扫下码,这些代码应该也够了。
如果要更多的了解,就去官网看文档吧,或者从Code4App那里下载的文件里找Documentation.html