ZBar SDK (iOS): Zbar не сканирует, когда я использую subview

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

Есть ли что-то, что я могу добавить в свой код, что позволило бы мне использовать ZBar в подпредставлении? Или это неправильный способ использовать 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];

}

person user1486548    schedule 04.04.2013    source источник


Ответы (2)


это работает для меня в 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);

}
person Jeremy Roberts    schedule 10.04.2013
comment
Спасибо! К сожалению, добавление отсканированного изображения не помогло. Я думаю, что у меня что-то не так в моем AppDelegate ... Не могли бы вы поделиться своим кодом AppDelegate? - person user1486548; 12.04.2013
comment
Конечно, я сделал этот проект ради вашего ответа. dropbox.com/s/dojirkslmpfk8ym/CameraView.zip - person Jeremy Roberts; 15.04.2013
comment
Спасибо! Невероятно полезно! - person user1486548; 15.04.2013
comment
@JeremyRoberts Как я могу использовать этот код в viewDidLoad ??? У меня есть панель вкладок, и я хочу на первой вкладке qr-reader. Но если я удалю ваш код с viewDidAppear на viewDidLoad, изображение застынет в предыдущем состоянии. - person user2545330; 09.10.2013

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

person Srithar Rajendran    schedule 16.09.2013