我们正在使用ZBarSDK的1.2版(并尝试使用Beta 1.3.1版)来读取应用中的条形码。我们已经使用此代码一段时间了,在iOS 5和6中都没有问题,但是iOS 7似乎在初始化相机时遇到了一些问题。当我们在ZBarReaderView中调用start方法时,初始化相机需要30到60秒甚至更长的时间。用户一直看到黑色的相机视图,他们想知道该应用程序是否有效。

初始化视图后,我们可以将其关闭并重新打开任何次数而没有任何问题,并且视图会快速打开。

这是我们代码的相关部分:

- (void)showAnimated:(BOOL)animated
{
    [self.controller overlayWillShow:self];
    dispatch_async(dispatch_queue_create(0, 0), ^{[self.zBarReaderView start];});
    CGRect frame = self.superview.frame;
    frame.origin.y = -hiddenYOrigin;
    [UIView animateWithDuration:0.4 animations:^{
        self.superview.frame = frame;
    } completion:^(BOOL finished){
        if (((ScanController *)self.controller).scanMode == ScanModeManualEntry) {
            [self.manualEntryTextField becomeFirstResponder];
        }
        self.showing = YES;
        [self.controller overlayDidShow:self];
    }];
}

所有这些代码都快速执行,但是对ZBarReaderView start的dispatch_queue_create调用是我们长时间挂断的地方。

有任何想法吗?

最佳答案

您的问题可能与此有关(请查看评论):

iOS7 : UIImageView Takes Forever to Appear

我们不知道[self.zBarReaderView start]实际执行哪些命令,但是ZBarReaderView的文档说:

这是包装在UIView中的条形码阅读器。

如果要在UIViews中布置子视图,则据说在后台线程中调用“开始”是不安全的,而在iOS6中,由于内部结构已更改,因此在iOS7中不再可用。

尝试在主线程中初始化相机,然后查看它是否有效:

 dispatch_async(dispatch_get_main_queue(), ^{[self.zBarReaderView start];});

关于ios - iOS 7和ZBarReaderView启动需要很长时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19368124/

10-14 22:33