zoukankan      html  css  js  c++  java
  • 自定义二维码扫描界面

    有时需要在扫描界面显示应用程序的导航条和工具栏,而不是全屏都是扫描界面,此时就需要自定义扫描界面。

    这时,用ZBarReaderView比较方便,比ZBarReaderViewcontroller方便控制界面。

    1.将扫描视图加到当前需要扫描的界面上

        ZBarReaderView *readerView = [[ZBarReaderView alloc]init];
        readerView.frame = CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height - 88);
        ScanRegionView *scanView = [[ScanRegionView alloc] initWithFrame:CGRectMake(0, 0, 320, readerView.frame.size.height)];
        scanView.backgroundColor = [UIColor clearColor];
        readerView.readerDelegate = self;
        [readerView addSubview:scanView];
        //关闭闪光灯
        readerView.torchMode = 0;
      
        [self.view addSubview:readerView];
        //扫描区域计算
        readerView.scanCrop = [self getScanCrop:scanMaskRect readerViewBounds:readerView.bounds];
        
        [readerView start];

    2、实现委托ZBarReaderViewDelegate委托方法

    ZBarReaderViewDelegate

    -(void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
    {
        const zbar_symbol_t *symbol = zbar_symbol_set_first_symbol(symbols.zbarSymbolSet);
        NSString *symbolStr = [NSString stringWithUTF8String: zbar_symbol_get_data(symbol)];
        
        //判断是否包含 头'http:'
        NSString *regex = @"http+:[^\s]*";
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
        
        //判断是否包含 头'ssid:'
        NSString *ssid = @"ssid+:[^\s]*";;
        NSPredicate *ssidPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",ssid];
        
        if ([predicate evaluateWithObject:symbolStr]) {

        }
        else if([ssidPre evaluateWithObject:symbolStr]){
            
            NSArray *arr = [symbolStr componentsSeparatedByString:@";"];
            
            NSArray * arrInfoHead = [[arr objectAtIndex:0] componentsSeparatedByString:@":"];
            
            NSArray * arrInfoFoot = [[arr objectAtIndex:1] componentsSeparatedByString:@":"];
            
            
            symbolStr = [NSString stringWithFormat:@"ssid: %@ password:%@",
                                [arrInfoHead objectAtIndex:1],[arrInfoFoot objectAtIndex:1]];
            
            UIPasteboard *pasteboard=[UIPasteboard generalPasteboard];
            //然后,可以使用如下代码来把一个字符串放置到剪贴板上:
            pasteboard.string = [arrInfoFoot objectAtIndex:1];
        }
    }

    这样就能按自己的想法来设置扫描界面了。我试过将中间一小块区域设置成扫描区域,周围全是半透明的背景层,相对于使用ZBarReaderViewcontroller,更容易实现。

  • 相关阅读:
    字符串(url)拼接变量
    elementUI table数据显示效果(二)
    异常(转)
    PHP 的异常处理、错误的抛出及错误回调函数 (转)
    详细解读PHP类的封装 (转)
    什么是抽象类
    什么是类,什么是对象,类和对象之间的关系
    魔术方法
    类的声名
    self
  • 原文地址:https://www.cnblogs.com/guatiantian/p/3301325.html
Copyright © 2011-2022 走看看