停止ZxingObjC中的连续扫描

时间:2014-08-28 14:17:07

标签: ios zxing scanning

我正在使用Zxing扫描数据矩阵代码。我从github导入了zxing。当应用程序启动时,只要相机被放置在条形码上,相机就会重复扫描代码。我想在条形码解码后停止扫描并且我想执行任务然后再次开始扫描。我停止了扫描,但无法启动它。以下是我为停止扫描所做的工作。

这是我的ViewController.m

- (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result {
if (!result) return;

// We got a result. Display information about the result onscreen.
NSString *formatString = [self barcodeFormatToString:result.barcodeFormat];
NSString *display = [NSString stringWithFormat:@"Scanned!\n\nFormat: %@\n\nContents:\n%@",  formatString, result.text];

//here i called the stop method 
 [self.capture stop];

//i want to start scanning again ,so i created this method
 [self afterScan];
}

现在,一旦条形码被解码,相机就会停止。现在我想实现这个方法

 -(void) afterScan{

 // UIAlertVIew " code is decoded "
  // store in database

 // again start scanning
      [self.capture start];

  }

问题是相机无法再次启动。

ZXing中的启动和停止方法如下:

- (void)start {
if (self.hardStop) {
return;
}

if (self.delegate || self.luminanceLayer || self.binaryLayer) {
[self output];
}

if (!self.session.running) {
static int i = 0;
if (++i == -2) {
  abort();
}

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  [self.session startRunning];
});
}
 self.running = YES;
}

 - (void)stop {
  if (!self.running) {
 return;
 }

 if (self.session.running) {
 [self.layer removeFromSuperlayer];

  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  [self.session stopRunning];
    //[self.session startRunning];
  });
 }

 self.running = NO;


 }

请你帮我解决这个问题。

提前致谢。

2 个答案:

答案 0 :(得分:2)

当我这样做时,我使用了BOOL属性。

所以在你的视图控制器中放一个这样的:

@property (nonatomic, assign) BOOL hasScannedResult;

然后你需要if()条件检查以确保不会重复调用你的方法。

- (void)captureResult:(ZXCapture *)capture result:(ZXResult *)result {

    if(self.hasScannedResult == NO)
    {

        self.hasScannedResult = YES;

        // do something with result
    }
}

现在,当您想再次扫描时,请重置BOOL标志:

-(void)startScan
{
    // reset BOOL flag to enable scanning
    self.hasScannedResult = NO;

    // open the scanner
}

答案 1 :(得分:-1)

我通过调用[capture stopReading];

来停止相机

我通过调用[capture startReading];

再次启动它