【问题标题】:ZBar SDK (iOS): Zbar not scanning when I use a subviewZBar SDK (iOS):当我使用子视图时 Zbar 不扫描
【发布时间】:2013-04-04 19:17:52
【问题描述】:

我已在其他项目中成功使用过 ZBar,但在将其实施到我的最新项目中时遇到了问题。它设置为选项卡式视图应用程序,其中第一个选项卡是扫描仪,第二个选项卡输出结果。为了解决 ZBar 使用全屏而不显示标签栏的问题,我创建了一个子视图(参见下面的代码)。但是,我也在我的其他 ZBar 项目中对此进行了测试,当您使用子视图时,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];

}

【问题讨论】:

    标签: ios6 sdk subview zbar-sdk


    【解决方案1】:

    这在 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);
    
    }
    

    【讨论】:

    • 谢谢!不幸的是,添加扫描裁剪并没有解决它。我想我的 AppDelegate 可能有问题...您能分享您的 AppDelegate 代码吗?
    • 当然,我为您的回答制作了这个项目。 dropbox.com/s/dojirkslmpfk8ym/CameraView.zip
    • 谢谢!非常有帮助!
    • @JeremyRoberts 如何在 viewDidLoad 中使用该代码???我有标签栏,想在第一个标签 qr-reader 上。但是,如果我将您的代码从viewDidAppear 删除到viewDidLoad,图像会冻结在上一个状态。
    【解决方案2】:

    我也面临这样的问题。但是,一旦我将读取器对象变成全局对象而不是本地对象,那么它就可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      相关资源
      最近更新 更多