我正在为Iphone和Ipad开发QR码阅读器。我正在使用ZBar库来读取qr代码。但是当我专注于任何qr代码时,应用程序什么都不做。我正在使用文档部分中zbar站点上提供的代码。这是我的代码:
ZBarReaderViewController *barReader = [ZBarReaderViewController new];
barReader.readerDelegate = self;
[barReader.scanner setSymbology:ZBAR_QRCODE config:ZBAR_CFG_ENABLE to:0];
barReader.readerView.zoom = 1.0;
barReader.showsCameraControls = NO;
barReader.showsZBarControls = NO;
barReader.wantsFullScreenLayout = NO;
barReader.title = @"QRCode Reader";
[self presentModalViewController:barReader animated:YES];
并在
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
功能我正在检索像这样的qrcode
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
ZBarSymbolSet *symbols = [info objectForKey:ZBarReaderControllerResults];
ZBarSymbol *symb = nil;
NSString *qrCode = nil;
for(symb in symbols)
{
qrCode = [NSString stringWithString:symb.data];
}
NSLog(@"The results = %@",qrCode);
[self dismissModalViewControllerAnimated:YES];
答案 0 :(得分:4)
为什么不使用ZBarReaderViewDelegate?
- (void)readerView:(ZBarReaderView *)view didReadSymbols:(ZBarSymbolSet *)syms fromImage:(UIImage *)img
{
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
for (ZBarSymbol *sym in syms)
{
qrCode = [NSString sym.data];
}
NSLog(@"The results = %@",qrCode);
}
答案 1 :(得分:2)
这段代码对我有用: .h文件
ADD delegate protocol
< ZBarReaderDelegate >
.m文件
用于扫描
- (IBAction) scanButtonClick
{
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
reader.supportedOrientationsMask = ZBarOrientationMaskAll;
ZBarImageScanner *scanner = reader.scanner;
// TODO: (optional) additional reader configuration here
// EXAMPLE: disable rarely used I2/5 to improve performance
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
// present and release the controller
[self presentModalViewController: reader
animated: YES];
[reader release];
}
使用以下方式获取/检索:
- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info
{
// ADD: get the decode results
id<NSFastEnumeration> results =
[info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
// EXAMPLE: just grab the first barcode
break;
// EXAMPLE: do something useful with the barcode data
resultText.text = symbol.data;
// EXAMPLE: do something useful with the barcode image
resultImage.image =
[info objectForKey: UIImagePickerControllerOriginalImage];
// ADD: dismiss the controller (NB dismiss from the *reader*!)
[reader dismissModalViewControllerAnimated: YES];
}
答案 2 :(得分:2)
默认情况下启用所有符号系统。你的代码
[barReader.scanner setSymbology:ZBAR_QRCODE config:ZBAR_CFG_ENABLE to:0];
将符号系统ZBAR_QRCODE
的配置ZBAR_CFG_ENABLE
设置为0 (false)
。这意味着您实际上正在禁用QRCodes扫描。
disabling unused symbologies上的Zlib文档解释了:
例如,如果您只对QR码感兴趣,请禁用 其他。执行此操作的有效方法是禁用所有符号系统和 然后重新启用只有你想要的那些。这有助于隔离你 遇到可能在未来版本中添加的新符号 图书馆,直到你准备好处理它们:
// disables all symbologies
[scanner setSymbology: 0
config: ZBAR_CFG_ENABLE
to: 0];
// enables QRCode
[scanner setSymbology: ZBAR_QRCODE
config: ZBAR_CFG_ENABLE
to: 1];
Here是受支持的符号系统列表。
SAMIR RATHOD的回答是有效的,因为只有符号系统ZBAR_I25被禁用。