2013-10-14 28 views
2

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

一旦视图被初始化,我们可以关闭它并重新打开任意次数而没有问题,并且它会很快打开。

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

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

所有代码的执行迅速,但dispatch_queue_create调用ZBarReaderView开始是我们都挂了很长一段时间。

任何想法?

回答

4

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

iOS7 : UIImageView Takes Forever to Appear

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

这是一个在UIView中封装的条形码阅读器。

,如果它在UIViews布局子视图,按说这不是安全的在后台线程中调用“开始”,并同时iOS6的这个工作它iOS7不下去了,因为内部已经改变。

尝试初始化相机在主线程,看看它的工作原理:

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

先生,你只是拥有属于自己的300点赏金。这一变化诀窍!非常感谢您抽出宝贵的时间来看这一个。 – davidethell

+0

没问题:确保你检查你没有其他实例在后台线程中调用一些zBarReaderView方法。 – vinaut