14

我们使用的是过去 2 年的 Zbar 条码阅读器。使用 iOS 7 和 Xcode 5,在扫描 5 个条码后,应用程序达到 iOS 7 设备的 100 % cpu 使用率(我可以在 Xcode 调试模式下看到)并且应用程序的响应速度变慢。我们在早期的 iO​​S 版本中从未遇到过问题,一切正常。

iOS 7 中与相机启动相关的事情是否发生了变化并且 ZBar SDK 未更新?其他人在 iOS 7 上遇到同样的问题吗?

4

6 回答 6

18

解决了这个问题:在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%

于 2013-09-26T12:49:36.617 回答
7

看到同样的问题后,

我从

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];

    }

所以,这是一种快速而肮脏的方法。我有一些额外的代码用于手动创建覆盖和限制扫描裁剪,但就让它运行而言,这对我有用。

于 2013-09-26T22:27:51.830 回答
4

我解决了 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 时冻结。)。至少在我的情况下它有效,并希望它也适用于你。

于 2013-10-15T17:24:27.357 回答
3

我现在通过从源头实施 Diff 解决了这个问题。如果有人需要,可以在此处下载已编译的支持 iOS7 的 zBar SDK。

您可以替换 libzbar.a - 这应该可以。但我上传了完整的 SDK,因为有人可能也需要它的标题等。

http://nerdvision.net/app-development/ios/zbar-sdk

于 2013-10-08T11:56:19.287 回答
0

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 :)

于 2014-04-10T08:01:54.520 回答
0

我是同样的问题,很容易解决。不记得下面的代码。您必须在阅读器视图之外放置此代码。

[阅读停止];

cpu 过载问题是由重复的相机流引起的。

于 2013-10-16T04:53:07.260 回答