Ios 二维码和条形码扫描器代码不工作Xcode 5.1
我已经完成了这个教程 我在IOS SDK 7.1、Xcode 5.1.1、Mac OSX 10.9.4和objective c上使用iPhone模拟器。当我运行程序时,应该发生的情况如下: 1我单击第一次出现的窗口上的扫描按钮 2我可以在iPhone相册中选择要扫描的图像 3我选择一个二维码或条形码 它扫描条形码 5它确定值并将其与扫描图像的小版本一起显示在屏幕上 实际发生的情况是,到了第4步,扫描图像的方法运行到完成开始扫描。但是,它没有执行步骤5,而是在屏幕上显示了一个巨大的条形码版本,执行步骤5的方法从未被称为didFinishPickingMediaWithInfo ViewController.h的内容Ios 二维码和条形码扫描器代码不工作Xcode 5.1,ios,iphone,objective-c,zbar-sdk,Ios,Iphone,Objective C,Zbar Sdk,我已经完成了这个教程 我在IOS SDK 7.1、Xcode 5.1.1、Mac OSX 10.9.4和objective c上使用iPhone模拟器。当我运行程序时,应该发生的情况如下: 1我单击第一次出现的窗口上的扫描按钮 2我可以在iPhone相册中选择要扫描的图像 3我选择一个二维码或条形码 它扫描条形码 5它确定值并将其与扫描图像的小版本一起显示在屏幕上 实际发生的情况是,到了第4步,扫描图像的方法运行到完成开始扫描。但是,它没有执行步骤5,而是在屏幕上显示了一个巨大的条形码版本,执行
//
// ViewController.h
// BarCodeScannerDemo
//
// Created by RDC on 3/11/13.
// Copyright (c) 2013 RDC World. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "ZBarSDK.h"
@interface ViewController : UIViewController<ZBarReaderDelegate>
@property (weak, nonatomic) IBOutlet UIImageView *resultImageView;
@property (weak, nonatomic) IBOutlet UITextView *resultTextView;
- (IBAction)startScanning:(id)sender;
@end
我花了很多时间试图找到一个解决方案,但我没有找到任何能提供解决方案的东西。我见过的唯一一个像我一样有问题的人是在教程页面的评论部分,但他们从未得到回复
请帮忙
编辑:
显示的图像以90度旋转。另外,我对objective c还不熟悉,所以如果您提供代码,请解释为什么差异会产生影响。我想提高我的知识=
编辑:解决方案
由于我在提问后8小时内无法回答自己的问题,我发现:
在这里阅读关于ZBarReaderViewController的ZBarSDK API参考资料后:
它说,这是一个控制器,用于从自动捕获的摄像机馈送进行实时扫描。有关从图像文件扫描或手动捕获的信息,请参阅ZBarReaderController
这意味着startScanning方法中的ZBarReaderViewController对象设置不是应该存在的。嗯,不是用来扫描静态图像的。我将不得不用实际的设备而不是Mac来测试原始代码,但似乎ZBarReaderController才是我真正想要的
新的StartScaning方法现在如下所示:
- (IBAction)startScanning:(id)sender
{
resultTextView.text = @"Scanning..";
//Create a reader
ZBarReaderViewController *codeReader = [ZBarReaderController new];
//Setup a delegate to recieve the results
//The delegate implements the ZBarReaderDelegate protocol, which inherits from UIImagePickerControllerDelegate
codeReader.readerDelegate= self;
[codeReader.scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0];
[self presentViewController:codeReader animated:YES completion:nil];
}
在测试时,我注意到教程网站上提供的带有透明背景的图像(如二维码和条形码图像)不起作用-你会收到一条消息,说找不到代码。您应该将它们保存为带有白色背景的jpg文件
我不知道是否还需要做些什么,因为我只是重命名了一个对象并删除了一些导致错误的代码行——但程序确实按照我目前期望的方式运行。如果我有任何未来的问题,我会发布一个新问题。试试这段代码
ZBarReaderViewController *codeReader = [ZBarReaderViewController new];
codeReader.readerDelegate= self;
codeReader.supportedOrientationsMask = ZBarOrientationMaskAll;
[codeReader.scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0];
[codeReader.readerView start];
[self presentViewController:codeReader animated:YES completion:nil];
以下是可选的=
[codeReader.readerView setZoom:2];
codeReader.view.frame = self.view.bounds;
感谢您的快速回复!=我用该代码替换了startScanning的内容,然后尝试在presentViewController行之前插入选项代码,但它似乎有相同的问题。我应该补充的是,显示的图像旋转90度,并覆盖了屏幕。另外,我还不熟悉objective c,所以我不确定用codeReader.scanner替换scanner对象的效果如何。我将更新原始帖子以反映所有这些。您确定-void imagePickerController:UIImagePickerController*reader didFinishPickingMediaWithInfo:NSDictionary*信息从未被调用吗?您有一行代码resultImageView.image=[info-objectForKey:UIImagePickerControllerOriginalImage];在里面。我猜这会使条形码图像出现在屏幕上。我说它不会被调用,因为我输入了NSlog语句,它们不会出现在消息日志中。这可能是因为我缺乏知识。是否有其他显示消息/错误消息/异常的方法?您可以使用断点。你怎么知道它扫描条形码是好的?如果可以,则必须调用委托方法。屏幕上巨大版本的条形码不是resultImageView吗?我在didFinishPickingMediaWithInfo的开头插入了一个断点,但程序没有在应该到达的时候停止。在resultImageView的reguards中,我还尝试用信息评论didFinishPickingMediaWithInfo的全部内容,但仍然出现了巨大的屏幕填充图像。当大的透明条形码出现时,我仍然可以看到屏幕,要求我按下两个手指进入照片。
- (IBAction)startScanning:(id)sender
{
resultTextView.text = @"Scanning..";
//Create a reader
ZBarReaderViewController *codeReader = [ZBarReaderController new];
//Setup a delegate to recieve the results
//The delegate implements the ZBarReaderDelegate protocol, which inherits from UIImagePickerControllerDelegate
codeReader.readerDelegate= self;
[codeReader.scanner setSymbology: ZBAR_I25 config: ZBAR_CFG_ENABLE to: 0];
[self presentViewController:codeReader animated:YES completion:nil];
}
ZBarReaderViewController *codeReader = [ZBarReaderViewController new];
codeReader.readerDelegate= self;
codeReader.supportedOrientationsMask = ZBarOrientationMaskAll;
[codeReader.scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0];
[codeReader.readerView start];
[self presentViewController:codeReader animated:YES completion:nil];
[codeReader.readerView setZoom:2];
codeReader.view.frame = self.view.bounds;