我们使用的是过去 2 年的 Zbar 条码阅读器。使用 iOS 7 和 Xcode 5,在扫描 5 个条码后,应用程序达到 iOS 7 设备的 100 % cpu 使用率(我可以在 Xcode 调试模式下看到)并且应用程序的响应速度变慢。我们在早期的 iOS 版本中从未遇到过问题,一切正常。
iOS 7 中与相机启动相关的事情是否发生了变化并且 ZBar SDK 未更新?其他人在 iOS 7 上遇到同样的问题吗?
我们使用的是过去 2 年的 Zbar 条码阅读器。使用 iOS 7 和 Xcode 5,在扫描 5 个条码后,应用程序达到 iOS 7 设备的 100 % cpu 使用率(我可以在 Xcode 调试模式下看到)并且应用程序的响应速度变慢。我们在早期的 iOS 版本中从未遇到过问题,一切正常。
iOS 7 中与相机启动相关的事情是否发生了变化并且 ZBar SDK 未更新?其他人在 iOS 7 上遇到同样的问题吗?
解决了这个问题:在viewdidload
readerqr = [ZBarReaderViewController new];
readerqr.readerDelegate = self;
readerqr.showsHelpOnFail = NO;
ZBarImageScanner *scanner = readerqr.scanner;
[scanner setSymbology: 0
config: ZBAR_CFG_ENABLE
to: 0];
[scanner setSymbology: ZBAR_QRCODE
config: ZBAR_CFG_ENABLE
to: 1];
// you can use this to support the simulator
if(TARGET_IPHONE_SIMULATOR) {
cameraSim = [[ZBarCameraSimulator alloc]
initWithViewController: self];
cameraSim.readerView = readerView;
}
创建ZBarReaderViewController *readerqr;
为您的视图控制器的属性。
使用它:
-(void) showqr:(id)sender
{
[self presentViewController:readerqr animated:YES completion:nil];
return;
}
这种方式有效,没有泄漏,没有cpu 100%
看到同样的问题后,
我从
ZBarReaderViewController
至
ZBarReaderView
但是,令人失望的部分是,如果您在 ZBarReaderViewController 中使用 Overlay 之类的功能,则必须重新编码所有工作原理,并且必须手动实现诸如启动和停止扫描仪之类的操作。
但本质上,您的 IBAction 中需要这样的东西:
ZBarReaderView *reader = [ZBarReaderView new];
[self.view addSubview:reader];
reader.readerDelegate = self;
reader.tracksSymbols=YES;
ZBarImageScanner *scanner = reader.scanner;
reader.tag = 99999999;
// 这里重要的部分是开始扫描
[reader start];
另外,请记住将标题中的委托更改为 ZBarReaderViewDelegate
此外,至少在我的代码中,被调用的委托“方法”现在是(相对于 imagePickerController)
-(void) readerView: (ZBarReaderView*) view
didReadSymbols: (ZBarSymbolSet*) syms
fromImage: (UIImage*) img
{
for(ZBarSymbol *sym in syms) {
[view stop];
[self closeCameraScanner];
// I am also setting reader to NIL but I don't really know if this is necessary or not.
reader=nil;
}
}
-(void)closeCameraScanner{
UIView * v = [self.view viewWithTag:99999999];
if (nil != v) {
[v removeFromSuperview];
}
[self.view endEditing:YES];
}
所以,这是一种快速而肮脏的方法。我有一些额外的代码用于手动创建覆盖和限制扫描裁剪,但就让它运行而言,这对我有用。
我解决了 Barry Mc G 的问题。
即使在使用来自http://nerdvision.net/app-development/ios/zbar-sdk的 iOS7 修补 zBar SDK 后,我也遇到了同样的问题。(第 5 次到第 6 次打开它在 100% CPU 时冻结的页面。)
无论您是继承 ZBarViewController 还是直接使用它,您都会呈现视图控制器并在完成扫描仪后将其关闭。我找到了发生这种情况的原因,原因是我没有停止视频流。在 ZBarReaderView 中,有一个函数 - (void)stop; 如果您在完成扫描仪后运行此功能,您将不会看到问题(第 5 次到第 6 次打开页面时它会在 100% CPU 时冻结。)。至少在我的情况下它有效,并希望它也适用于你。
我现在通过从源头实施 Diff 解决了这个问题。如果有人需要,可以在此处下载已编译的支持 iOS7 的 zBar SDK。
您可以替换 libzbar.a - 这应该可以。但我上传了完整的 SDK,因为有人可能也需要它的标题等。
had same Problems, Scanner seems to be freeze ..
I fixed it like joaquin ...
Make a Property for the reader and when you call it multiple times you can check, if a Object of the reader where initialize ...
Here is what i´m doing:
- (IBAction)ShowZBarReader
{
// ADD: present a barcode reader that scans from the camera feed
if (!self.reader) {
self.reader = [[ZBarReaderViewController alloc]init];
}
self.reader.readerDelegate = self;
self.reader.supportedOrientationsMask = ZBarOrientationMaskAll;
ZBarImageScanner *scanner = self.reader.scanner;
// zusätliche Configurationen ...
[scanner setSymbology: ZBAR_I25
config: ZBAR_CFG_ENABLE
to: 0];
// stellt Bild zur verfügung
[self presentViewController:self.reader animated:YES completion:nil];
}
Worked perfectly for me ! Hope it helps :)
我是同样的问题,很容易解决。不记得下面的代码。您必须在阅读器视图之外放置此代码。
[阅读停止];
cpu 过载问题是由重复的相机流引起的。