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 を機能させるのに必要な時間がありませんか? 問題がこれである場合、どうすれば回避できますか?