2013-04-04 3 views
1

Я использовал успешно используемый ZBar в других проектах, но у меня проблемы с его внедрением в мой последний проект. Он настроен как приложение с вкладками, где первая вкладка является сканером, а вторая выводит результаты. Чтобы обойти проблему ZBar, используя полный экран и не отображая панель вкладок, я создал подвью (см. Код ниже). Однако, и я тестировал это на других моих проектах ZBar, когда вы используете subview, ZBar никогда не читает штрих-код, а затем сохраняет закодированные данные. Вместо этого анимационный сканирующий сканер просто отскакивает.ZBar SDK (iOS): Zbar не сканирует, когда я использую subview

Есть ли что-то, что я могу добавить в свой код, который позволил бы мне использовать ZBar в subview? Или это неправильный способ использовать ZBar в приложении с вкладками?

Вот мой метод сканирования:

- (void) presentReader 
{ 
    ZBarReaderViewController *reader = [ZBarReaderViewController new]; 
    reader.readerDelegate = self; 
    reader.supportedOrientationsMask =  ZBarOrientationMask(UIInterfaceOrientationPortrait); 
    reader.showsHelpOnFail = YES; 

    NSLog(@"reader presented"); 

    ZBarImageScanner *scanner = reader.scanner; 
    // TODO: (optional) additional reader configuration here 
    // EXAMPLE: disable rarely used I2/5 to improve performance 
    [scanner setSymbology: 0 
       config: ZBAR_CFG_ENABLE 
        to: 0]; 
    [scanner setSymbology: ZBAR_UPCA 
       config: ZBAR_CFG_ENABLE 
        to: 0]; 
    [scanner setSymbology: ZBAR_DATABAR 
       config: ZBAR_CFG_ENABLE 
        to: 1]; 
    [scanner setSymbology: ZBAR_DATABAR_EXP 
       config: ZBAR_CFG_ENABLE 
        to: 1]; 


    reader.showsCameraControls = NO; // for UIImagePickerController 
    reader.showsZBarControls = NO; 
    //reader.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto; 
    reader.wantsFullScreenLayout = NO; 

    reader.videoQuality = UIImagePickerControllerQualityTypeIFrame1280x720; 

    //Subview 
    [self.view addSubview:reader.view]; 

} 

ответ

3

это работает для меня в UITabBarController - (Изображение) http://db.tt/cgVxDd0x

Я думаю, ваша проблема в том, что вы не настраивали reader.scanCrop.

-(void) viewDidAppear:(BOOL)animated { 
    self.reader = [ZBarReaderViewController new]; 
    self.reader.readerDelegate = self; 
    self.reader.enableCache = NO; 
    self.reader.showsZBarControls = NO; 
    self.reader.wantsFullScreenLayout = NO; 
    self.reader.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff; 
    self.reader.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationPortrait); 

    ZBarImageScanner *scanner = self.reader.scanner; 

    [scanner setSymbology: ZBAR_I25 
        config: ZBAR_CFG_ENABLE 
         to: 0]; 

    self.reader.scanCrop = CGRectMake(0, 0, 1, 1); 
    [self.view addSubview:self.reader.view]; 

} 

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

    NSLog(@"%@",symbol.data); 

} 
+0

Спасибо! К сожалению, добавление урона сканирования не исправить. Я думаю, что у меня может быть что-то не так в моем AppDelegate ... Не могли бы вы поделиться своим кодом AppDelegate? – user1486548

+0

Конечно, я сделал этот проект для вашего ответа. https://www.dropbox.com/s/dojirkslmpfk8ym/CameraView.zip –

+1

Спасибо! Невероятно полезно! – user1486548

0

Я также сталкиваюсь с такой проблемой. Но, как только я сделал этот объект-читатель в глобальном объекте вместо локального, это было прекрасно.