0

zbarSDK QR コード リーダーhttp://zbar.sourceforge.net/iphone/sdkdoc/を使用しています。

SDK は非常に優れていますが、少し問題が発生しました。ユーザーがスキャンを開始する前にビューを視覚化する必要があります (スキャン方法に関する情報を含む)。スキャンを開始するボタンを押して (カメラを表示)、qr コードがスキャンされて別のビューに移動する特定のqrコードにリンクされたもの。私はこれを行いましたが、スキャンを開始したにqrコードをフレームに入れるとうまくいきますが、スキャンを開始したときに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];
}

使用して

[self presentModalViewController: reader
                        animated: YES];

ビデオカメラを見せて、QRコードをスキャンします。そして、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"); }];

次のセグエにリンクされたビューを提示します。

カメラをqrcodeがないポイントに向けてからqrcocdeに向けると、すべてうまくいきます。代わりに、スキャンを開始するときに、カメラのフレームにすでにqrコードがある場合、imagePickerControllerが実行されます(iチェック済み) しかし、dismissViewControllerAnimated:YES は何も却下せず、「完了」後にブロックを実行しません (代わりに正しく実行され、「テスト」を nslogging します)

どうしたの?presentModalViewController には、dismissViewControllerAnimated を機能させるのに必要な時間がありませんか? 問題がこれである場合、どうすれば回避できますか?

4

1 に答える 1

2

私は同じ問題を抱えていて、これを回避する方法を見つけました。presentViewControllerの前に以下のようにリーダーでscanCropプロパティを設定し、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);
}
于 2013-03-30T00:58:32.557 に答える