iOS 二維碼掃描

iOS開發(fā)中 二維碼掃描

前言

在移動開發(fā)中二維碼掃描這種事情越來越常見了盗誊,在iOS中我選擇了用ZBar這個第三方來實現(xiàn)时甚。

原因有三:好用隘弊,好用,好用荒适。

好了來點正經(jīng)的干貨吧梨熙。首先獻上下載地址:快來點我

然后你就可以把整個 ZBar文件夾拉到你的項目的Lib之類的目錄下面了。

如果用pod刀诬,就直接 pod 'ZBarSDK', '~> 1.3.1' 串结, 那么你就可以越過下面那個添加庫類的步驟了。

ZBar的使用給我們倆種選擇舅列,一種是自定義一個二維碼視圖,另一種是用他們自帶的二維碼視圖(奇丑無比)卧蜓。

添加庫類

如下添加這些庫類帐要。

ZBar庫類

自定義二維碼視圖

一般都是給一個按鈕綁定一個點擊事件,然后當按鈕點擊的時候 就會調用二維碼掃描弥奸,然后掃描成功就返回榨惠。

就像下面這個demo截圖一樣。

Demo截圖.png

然后就是正題了盛霎,我們首先要#import "ZBarSDK.h".然后自定義的話 就要遵循這個代理<ZBarReaderViewDelegate>

然后就可以在點擊的回調函數(shù)中設置如下:

    // Do any additional setup after loading the view.
    //初始化照相機窗口 這個readview 就是要美化的view
    ZBarReaderView *readview = [ZBarReaderView new];
    //自定義大小
    readview.frame = CGRectMake(100, 100, 300, 300);
    //自定義添加相關指示.........發(fā)揮各自的APP的想象力
    //此處省略美化10000行代碼...................
    //………………………..
    // 好進入正題—— 接著設置好代理
    readview.readerDelegate = self;
    
    //將其照相機拍攝視圖添加到要顯示的視圖上
    [self.view addSubview:readview];
    
    
    //二維碼/條形碼識別設置
    ZBarImageScanner *scanner = readview.scanner;
    
    [scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];
    //啟動赠橙,必須啟動后,手機攝影頭拍攝的即時圖像菜可以顯示在readview上
    [readview start];

還要實現(xiàn)如下delegate方法愤炸,監(jiān)聽掃描成功回調:

-(void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
{
    ZBarSymbol *symbol = nil;
    for (symbol in symbols)
    {
        break;
    }
    //掃描成功期揪,讓readerView消失 
    [readerView removeFromSuperview];
    
    //這個是二維碼得到的數(shù)據(jù)
    NSString *data = symbol.data;
    //數(shù)據(jù)處理 
    //.......
}

自帶的二維碼視圖

和上面不同的是,這次我們要遵從的delegate變了是<ZBarReaderDelegate>.

然后再cilck方法里實現(xiàn)以下代碼:

    //初始化相機控制器
    ZBarReaderViewController *reader = [ZBarReaderViewController new];
    //設置代理
    reader.readerDelegate = self;
    //基本適配
    reader.supportedOrientationsMask = ZBarOrientationMaskAll;

    //二維碼/條形碼識別設置
    ZBarImageScanner *scanner = reader.scanner;

    [scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];
    //彈出系統(tǒng)照相機规个,全屏拍攝
    [self presentModalViewController: reader animated: YES];

然后實現(xiàn)以下的delegate.

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    id<NSFastEnumeration> symbols = [info objectForKey:ZBarReaderControllerResults];
    
    ZBarSymbol *symbol = nil;
    for (symbol in symbols)
    {
        break;
    }
    
    [picker dismissModalViewControllerAnimated:YES];
    
    //數(shù)據(jù)
    NSString *data = symbol.data;
}

我自定義的 二維碼View

- (void)setOverlayPickerView:(ZBarReaderView *)reader
{
    
    //清除原有控件
    
    for (UIView *temp in [reader 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];
                
            }
            
        }
        
    }
    
    /*
    //畫中間的基準線 可有可無 個人愛好
    
    UIView* line = [[UIView alloc] initWithFrame:CGRectMake(40, 220, 240, 1)];
    
    line.backgroundColor = [UIColor redColor];
    
    [reader addSubview:line];
    */

    
    //最上部view
    
    UIView* upView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
    
    upView.alpha = 0.3;
    
    upView.backgroundColor = [UIColor blackColor];
    
    [reader addSubview:upView];
    

    //左側的view
    
    UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 80, 20, 280)];
    
    leftView.alpha = 0.3;
    
    leftView.backgroundColor = [UIColor blackColor];
    
    [reader addSubview:leftView];
    

    
    //右側的view
    
    UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(300, 80, 20, 280)];
    
    rightView.alpha = 0.3;
    
    rightView.backgroundColor = [UIColor blackColor];
    
    [reader addSubview:rightView];
    

    
    //底部view
    
    UIView * downView = [[UIView alloc] initWithFrame:CGRectMake(0, 360, 320, 120)];
    
    downView.alpha = 0.3;
    
    downView.backgroundColor = [UIColor blackColor];
    
    [reader addSubview:downView];
    
    
    //用于說明的label
    
    UILabel * labIntroudction= [[UILabel alloc] init];
    
    labIntroudction.backgroundColor = [UIColor clearColor];
    
    labIntroudction.frame=CGRectMake((ScreenW - 280)*0.5,8, 280, 40);
    
    labIntroudction.numberOfLines=2;
    
    labIntroudction.textColor=[UIColor whiteColor];
    
    labIntroudction.font = Font(15);
    
    labIntroudction.text=@"將二維碼圖像置于矩形方框內";
    labIntroudction.textAlignment = NSTextAlignmentCenter;
    
    [downView addSubview:labIntroudction];
    
    /*
    //用于取消操作的button 可有可無
    
    UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    
    cancelButton.alpha = 0.4;
    
    [cancelButton setFrame:CGRectMake(20, 390, 280, 40)];
    
    [cancelButton setTitle:@"將二維碼圖像置于矩形方框內" forState:UIControlStateNormal];
    
    [cancelButton.titleLabel setFont:[UIFont boldSystemFontOfSize:20]];
    
    [cancelButton addTarget:self action:@selector(dismissOverlayView:)forControlEvents:UIControlEventTouchUpInside];  
    
    [reader addSubview:cancelButton];
     */
    
}

總結

倆種方式都挺簡單的凤薛,建議用自定義的,因為靈活 漂亮诞仓。

參考致謝

http://www.yanyulin.info/pages/2015/01/25901846652567.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末缤苫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子墅拭,更是在濱河造成了極大的恐慌活玲,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谍婉,死亡現(xiàn)場離奇詭異舒憾,居然都是意外死亡,警方通過查閱死者的電腦和手機屡萤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門珍剑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人死陆,你說我怎么就攤上這事招拙∵篑” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵别凤,是天一觀的道長饰序。 經(jīng)常有香客問我,道長规哪,這世上最難降的妖魔是什么求豫? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮诉稍,結果婚禮上蝠嘉,老公的妹妹穿的比我還像新娘。我一直安慰自己杯巨,他們只是感情好蚤告,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著服爷,像睡著了一般杜恰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仍源,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天心褐,我揣著相機與錄音,去河邊找鬼笼踩。 笑死逗爹,一個胖子當著我的面吹牛,可吹牛的內容都是我干的嚎于。 我是一名探鬼主播桶至,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匾旭!你這毒婦竟也來了镣屹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤价涝,失蹤者是張志新(化名)和其女友劉穎女蜈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體色瘩,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡伪窖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了居兆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片覆山。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泥栖,靈堂內的尸體忽然破棺而出簇宽,到底是詐尸還是另有隱情勋篓,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布魏割,位于F島的核電站譬嚣,受9級特大地震影響,放射性物質發(fā)生泄漏钞它。R本人自食惡果不足惜拜银,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遭垛。 院中可真熱鬧尼桶,春花似錦、人聲如沸锯仪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卵酪。三九已至,卻和暖如春谤碳,著一層夾襖步出監(jiān)牢的瞬間溃卡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工蜒简, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘸羡,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓搓茬,卻偏偏與公主長得像犹赖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卷仑,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內容