2012-07-04 101 views
0

我使用zbarSDK QR碼閱讀器http://zbar.sourceforge.net/iphone/sdkdoc/dismissViewControllerAnimated並沒有消除使用ZbarSDK QR碼閱讀器

的SDK是非常偉大的,但我遇到了一個小問題。我需要用戶在開始掃描之前可視化一個視圖(包含有關如何掃描的信息),而不是按下一個使掃描開始(顯示相機)的按鈕,以及何時掃描qr碼以查看另一個視圖與特定的qr代碼鏈接的東西。 我已經這樣做了,但是當我開始掃描後在之後構建二維碼,但是如果在開始掃描時qr代碼是已經在視頻相機視圖中已經構造了,那麼該方法就不行。

當我開始掃描我使用

[self presentModalViewController: reader 
         animated: YES]; 

顯示視頻攝像機和掃描QR碼爲此

-(IBAction)StartScan:(id) sender 
{ 
    ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
    reader.readerDelegate = self; 

    reader.readerView.torchMode = 0; 

    ZBarImageScanner *scanner = reader.scanner; 

    // present and release the controller 
    [self presentModalViewController: reader 
         animated: YES]; 
    [reader release]; 
} 

。 然後當QR碼已被掃描我這樣做:

- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info 
{  
     id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults]; 
     ZBarSymbol *symbol = nil; 

     for(symbol in results) 
      hiddenData=[NSString stringWithString:symbol.data]; 

     [reader dismissViewControllerAnimated:YES completion:^{ NSLog(@"Test"); }]; 

    [self performSegueWithIdentifier:@"aDettaglioOpera" sender:self]; 
} 

駁回攝像機視圖與

[reader dismissViewControllerAnimated:YES completion:^{ NSLog(@"Test"); }]; 

以及呈現鏈接到下列SEGUE的圖。

現在一切順利,如果一個點的相機到一個點沒有qrcode,然後指向它qrcocde,而不是如果當我開始掃描我已經在相機的幀中的qr代碼imagePickerController得到執行(我選中),但dismissViewControllerAnimated:YES不會消除任何東西,並且在「完成」(而不是正確執行並且nslogging「test」)之後不執行該塊。

問題是什麼? presentModalViewController沒有足夠的時間讓dismissViewControllerAnimated起作用嗎?如果問題是這個,我該如何避免它?

+0

您是否在解僱時檢查'reader'值?這是對的嗎?你在使用ARC嗎? – sergio

+0

我該如何檢查其價值?至今我試過NSLog(@「PRESENTED:%@」,[self presentedViewController]);並且在這兩種情況下都有效地提供了一個ZBarReaderViewController ...我沒有使用ARC,因爲與另一個SDK有關的問題與ARV有一些問題,我無法解決。 –

+0

哦,我忘了說,在有問題的情況下,如果我框架的另一件事情,而不是框架的qrcode解僱做它的工作 –

回答

2

我有同樣的問題,並找到了解決這個問題。 Set scanCrop property in reader如下所示presentViewController並在1秒後將其設置回默認值(0,0,1,1)。有用!!!

reader.scanCrop = CGRectMake(0, 0, 0.5, 0.5); 
[self performSelector:@selector(changeScanCrop) withObject:nil afterDelay:1.0]; 

-(void)changeScanCrop { 
    reader.scanCrop = CGRectMake(0, 0, 1, 1); 
} 
+0

我會盡快嘗試!我還沒有解決問題!非常感謝你! –

+0

不適用於我:_( –