我正在使用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;
}
请你帮我解决这个问题。
提前致谢。
答案 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];
再次启动它