我正在使用 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;
}
你能帮我解决这个问题吗。
提前致谢。
最佳答案
当我这样做时,我使用了一个 BOOL 属性。
所以像这样在你的 View Controller 中放一个:
@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
}
关于ios - 停止 ZxingObjC 中的连续扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25551076/