我们正在使用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/