내 응용 프로그램에서 Zbar SDK 스캐너를 통합했습니다. 일반적으로 잘 작동하지만 내 경우에는 didfinishpickingmediawithInfo : delegate method firing을 두 번 사용합니다. 여기 singletone 클래스에있는 코드가 있습니다.Zbar sdk 스캐너가 제대로 작동하지 않습니다.
배경에서 스캐너가 여전히 두 번 발생하는 경우 다음과 같이 실행 ..
내 응용 프로그램에서 Zbar SDK 스캐너를 통합했습니다. 일반적으로 잘 작동하지만 내 경우에는 didfinishpickingmediawithInfo : delegate method firing을 두 번 사용합니다. 여기 singletone 클래스에있는 코드가 있습니다.Zbar sdk 스캐너가 제대로 작동하지 않습니다.
배경에서 스캐너가 여전히 두 번 발생하는 경우 다음과 같이 실행 ..
저도 같은 문제로 실행 :
-(void)scanProductBarCode
{
ZBarReaderViewController *reader = [ZBarReaderViewController new];
reader.readerDelegate = self;
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
reader.supportedOrientationsMask = ZBarOrientationMaskLandscape;
else
reader.supportedOrientationsMask = ZBarOrientationMaskPortrait;
ZBarImageScanner *scanner = reader.scanner;
[scanner setSymbology: ZBAR_UPCA config: ZBAR_CFG_ENABLE to: 1];
[scanner setSymbology: ZBAR_CODE39 config: ZBAR_CFG_ADD_CHECK to: 0];
}
#pragma mark - Scanner delegate methods
- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info
{
id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results)
break;
barCodeString = [[NSString alloc] initWithString:symbol.data];
if(self.delegate)
[self.delegate getBarcodeString:barCodeString];
[reader dismissModalViewControllerAnimated:YES];
}
이 스크린 샷을 참조하십시오.
_processing
이라는 클래스에
BOOL
인스턴스 변수를 추가했습니다. 그런 다음이 작업을 수행했습니다.
- (void)imagePickerController:(UIImagePickerController*)reader didFinishPickingMediaWithInfo:(NSDictionary*)info
{
if (_processing) return;
id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults];
ZBarSymbol *symbol = nil;
for(symbol in results) {
_processing = YES;
barCodeString = symbol.data;
if(self.delegate) {
[self.delegate getBarcodeString:barCodeString];
}
break;
}
[reader dismissModalViewControllerAnimated:YES];
}
이렇게하면 첫 번째 호출 만 처리됩니다. 보기 컨트롤러를 두 번 이상 다시 사용하려는 경우 _processing
을 재설정해야 할 수도 있습니다.
ZBarReaderViewController는 이미지를 연속 모드로 스캔하기 때문에 ZBarReaderViewController를 닫기 전에 이미지가 두 번 스캔 될 수 있습니다. 당신은 독자 (ZBarReaderViewController * 독자) 클래스의 인스턴스 변수를 만드는 시도하고 위임 방법의 수
- (void)imagePickerController:(UIImagePickerController*)reader didFinishPickingMediaWithInfo:(NSDictionary*)info
{
// Stop further scanning
[reader.readerView stop];
...
//Continue with processing barcode data.
}
감사하지만,이 부울 플래그를 추가 한 후, 대리자 방법 gerbarcodeString은 : 한 번만 발사된다. 그러나 didFinishPickingMediaInfo : delegate 메소드의 두 번 발생시, 바코드 스캐닝이 처음 수행되고 스캐너 뷰가 애플리케이션에서 사임되지 않습니다. 위의 이미지를 참조하십시오. – Ganapathy