2014-08-28 97 views
0

我正在使用Zxing掃描數據矩陣代碼。我從github導入了zxing。當應用程序啓動時,只要照相機放置在條形碼上,照相機就會反覆掃描代碼。我想在條形碼解碼後停止掃描,然後我想要執行任務,然後再次開始掃描。我停止了掃描,但無法啓動它。這是我已經做了停止掃描。停止ZxingObjC中的連續掃描

這是我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]; 

    } 

問題是相機不能再次啓動。是

的啓動和停止方法在斑馬線如下:

- (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

當我做到了,我用了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

我用[_capture stop]停止掃描,我嘗試通過[_capture start]啓動它,但相機未啓動。 [_capture start]啓動攝像頭是否正確? – 2014-08-28 15:07:29

+0

停止API不工作,最好的方法是使用布爾參數。 – ondermerol 2017-03-09 13:13:53

+0

這個布爾如何停止相機@ondermerol – 2017-09-12 09:03:37

-1

我通過調用[捕獲stopReading]停止相機;

我通過調用[capture startReading]重新啓動它;

+0

對不起,但該API不工作,它總是掃描兩次,除非我叫停止API。 – ondermerol 2017-03-09 13:12:57