0

他のコードが最初に完了するまでメソッドの呼び出しを遅らせたい。

ボタンによってトリガーされるアクションは次のとおりです。ユーザーがバーコードをスキャンします。この他のメソッドを呼び出す前に、それを完了させたいと思います[self performSelector:@selector(otherMethod:) withObject:nil afterDelay:0.5]; 。遅延を使用しようとしましたが、それは良くなく、予測できません。

    - (IBAction) scanButtonTapped
{
    NSLog(@"TBD: scan barcode here...");

    // ADD: present a barcode reader that scans from the camera feed
    ZBarReaderViewController *reader = [ZBarReaderViewController new];
    reader.readerDelegate = self;
    reader.supportedOrientationsMask = ZBarOrientationMaskAll;

    ZBarImageScanner *scanner = reader.scanner;
    // TODO: (optional) additional reader configuration here

    // EXAMPLE: disable rarely used I2/5 to improve performance
    [scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];

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

    [self performSelector:@selector(otherMethod:) withObject:nil afterDelay:0.5];


}
4

2 に答える 2

3

おそらく、デリゲートメソッドを使用する必要があります

- (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
{
   //call other method here
}

ZBarライブラリを使用していると仮定しています

于 2013-09-18T10:20:30.280 に答える
1

スキャンコードは表示されませんが、スキャンが完了したときに呼び出すブロックを渡す必要があると思います(成功またはそうでない場合)

スキャン方法が次のようになっていると想像してください。

- (void)scanBarCodeWithCompletionBlock:^(BOOL successfulScan)completionBlock {

    if (do the scan) {
        completionBlock(YES);
    } else {
        completionBlock(NO);
    }
}

プロパティを介してスキャナーコードに完了ブロックを渡し、必要に応じて渡して呼び出すことができます。

ZBarImageScanner *scanner = reader.scanner;
scanner.completionBlock = ^(BOOL successfulScan) {
    if (!successfulScan) {
         initiateMoaningSequence();
    }
};
于 2013-09-18T10:32:46.367 に答える