[iOS]ZBar自定义界面

Demo地址:http://download.csdn.net/detail/u012881779/7977507

/* 二维码扫描 */
#import <UIKit/UIKit.h>

@interface WXQrCodeScanning : UIViewController

@property (weak, nonatomic) IBOutlet UIImageView *imageview; // 边框
@property (weak, nonatomic) IBOutlet UILabel     *labelAlert;// 提示
@property (weak, nonatomic) IBOutlet UIButton    *cancelBut; // 取消

// 扫描
- (void)QRscan;

@end


#import "WXQrCodeScanning.h"
#import "ZBarSDK.h"
#import "QRCodeGenerator.h"
#import "SZNGTipView.h"

@interface WXQrCodeScanning () <ZBarReaderDelegate, UIAlertViewDelegate, UIWebViewDelegate>

@property (strong, nonatomic) SZWaitView *waitV;   // 等待页面
@property (strong, nonatomic) UIWebView  *webView; // 二维码跳转页面
@property (strong, nonatomic) NSString   *urlStr;  // 链接
@property (strong, nonatomic) ZBarReaderViewController *reader;

@end

@implementation WXQrCodeScanning
@synthesize imageview = _imageview;
@synthesize waitV     = _waitV;
@synthesize webView   = _webView;
@synthesize urlStr    = _urlStr;
@synthesize reader    = _reader;

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

/**
 扫描二维码部分:
 导入ZBarSDK文件并引入一下框架
 AVFoundation.framework
 CoreMedia.framework
 CoreVideo.framework
 QuartzCore.framework
 libiconv.dylib
 引入头文件#import “ZBarSDK.h” 即可使用
 */
- (void)QRscan {
    _reader = [ZBarReaderViewController new];
    _reader.readerDelegate = self;
    // 非全屏
    _reader.wantsFullScreenLayout = NO;
    // 隐藏底部控制按钮
    _reader.showsZBarControls = NO;
    // 设置自己定义的界面
    [self setOverlayPickerView:_reader];
    ZBarImageScanner *scanner = _reader.scanner;
    [scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];
    [self presentViewController:_reader animated:NO completion:nil];
}

- (void)setOverlayPickerView:(ZBarReaderViewController *)reader {
    // 清除原有控件
    for (UIView *temp in [reader.view subviews]) {
        for (UIButton *button in [temp subviews]) {
            if ([button isKindOfClass:[UIButton class]]) {
                [button removeFromSuperview];
            }
        }
        for (UIToolbar *toolbar in [temp subviews]) {
            if ([toolbar isKindOfClass:[UIToolbar class]]) {
                [toolbar setHidden:YES];
                [toolbar removeFromSuperview];
            }
        }
    }
  
    // 提示
    [_labelAlert removeFromSuperview];
    [reader.view addSubview:_labelAlert];
    // 边框
    [_imageview removeFromSuperview];
    [_imageview.layer setBorderWidth:1];
    [_imageview.layer setBorderColor:[[UIColor whiteColor] CGColor]];
    [reader.view addSubview:_imageview];
    // 取消操作
    [_cancelBut removeFromSuperview];
    _cancelBut.alpha = 0.7;
    [_cancelBut.layer setCornerRadius:5];
    [_cancelBut addTarget:self action:@selector(dismissOverlayView:)forControlEvents:UIControlEventTouchUpInside];
    [reader.view addSubview:_cancelBut];
}

// 当找到条形码时,会执行代理方法,最后读取并显示了条形码的图片和内容
- (void) imagePickerController: (UIImagePickerController*) reader
 didFinishPickingMediaWithInfo: (NSDictionary*) info {
    id<NSFastEnumeration> results =
    [info objectForKey: ZBarReaderControllerResults];
    ZBarSymbol *symbol = nil;
    for(symbol in results)
        break;
    
//    _imageview.image =
//    [info objectForKey: UIImagePickerControllerOriginalImage];
//    [reader dismissViewControllerAnimated:YES completion:nil];
    // 判断是否包含 头'http:'
    NSString *regex = @"http+:[^\\s]*";
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
    
    // 判断是否包含 头'ssid:'
    NSString *ssid = @"ssid+:[^\\s]*";;
    NSPredicate *ssidPre = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",ssid];
    
    // 解决ZBar 乱码不需要静态库
    // 在自己的应用中调用下面的代码处理下获取的string即可
    // 识别扫描后的信息类型
    NSString *symbolStr = symbol.data;
    // zbar是日本人开发的,需要将默认的日文编码改为UTF8,否则扫描“坑爹”和“尼玛啊”等会出现乱码
    if ([symbolStr canBeConvertedToEncoding:NSShiftJISStringEncoding])
    {
        symbolStr = [NSString stringWithCString:[symbolStr cStringUsingEncoding: NSShiftJISStringEncoding] encoding:NSUTF8StringEncoding];
    }
    //label.text =  symbol.data ;
    _urlStr =  symbolStr;
    if(_urlStr != nil && ![_urlStr isEqualToString:@""] && symbolStr.length > 7){
        UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"提示"
                                                        message:[NSString stringWithFormat:@"链接:%@",_urlStr]
                                                       delegate:self
                                              cancelButtonTitle:@"取消"
                                              otherButtonTitles:@"跳转", nil];
        [alert show];
    }
}

// 取消button方法
- (void)dismissOverlayView:(id)sender {
    [_reader dismissViewControllerAnimated:NO completion:nil];
//    [self.view removeFromSuperview];
    [self.navigationController popViewControllerAnimated:YES];
}

#pragma mark UIAlertViewDelegate

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    // 取消
    if(buttonIndex == 0) {

    }
    // 确定
    if(buttonIndex == 1) {
        [_reader dismissViewControllerAnimated:NO completion:nil];
        
        NSURL *url = [[NSURL alloc] initWithString:_urlStr];
        _webView.delegate = self;
        [_webView setFrame:self.view.bounds];
        [self.view addSubview:_webView];
        NSURLRequest *request=[ NSURLRequest requestWithURL :url];
        [_webView loadRequest :request];
        
        // 等待页面
        NSString* msg = @"正在加载,请稍候...";
        _waitV = [[SZWaitView alloc] initWithString:msg];
        CGRect theRect = self.view.bounds;
        theRect.size.height = theRect.size.height + 40;
        [_waitV setBounds:theRect];
        _waitV.center = self.view.center;
        [_waitV setHidden:NO];
        [self.view addSubview:_waitV];
    }
}

#pragma mark UIWebViewDelegate

- (void)webViewDidStartLoad:(UIWebView *)webView {
    
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    _waitV.hidden = YES;
    [_waitV removeFromSuperview];
    _waitV = nil;
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    _waitV.hidden = YES;
    [_waitV removeFromSuperview];
    _waitV = nil;
}

@end
 

图例:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值