日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 最近在做的項目中需要用到二維碼掃描功能,之前在Android中使用過ZXing識別二維碼,ZXing也有對應(yīng)的iOS版本,經(jīng)過了解,ZBar也是一個常用的二維碼識別軟件,并分別提供了i

 最近在做的項目中需要用到二維碼掃描功能,之前在Android中使用過ZXing識別二維碼,ZXing也有對應(yīng)的iOS版本,經(jīng)過了解,ZBar也是一個常用的二維碼識別軟件,并分別提供了iOS和Android的SDK可供使用,最終我選擇了ZBar進行二維碼識別,它的注釋清晰,便于使用。

ZBar為我們提供了兩種使用方式,一種是直接調(diào)用ZBar提供的ZBarReaderViewController打開一個掃描界面,另一種方式 是使用ZBar提供的可以嵌在其他視圖中的ZBarReaderView,實際項目中我們更可能會使用第二種方式,這可以讓我們對界面做更多的定制。

ZBar使用起來也非常簡單,將ZBarSDK導(dǎo)入項目,在需要使用ZBar的文件中導(dǎo)入ZBarSDK.h頭文件即可,以下是ZBarReaderView的初始化方法:

01 ZBarReaderView readerView = [[ZBarReaderView alloc]init];
02 readerView.frame = CGRectMake(0, 44, self.view.frame.size.width, self.view.frame.size.height - 44);
03 readerView.readerDelegate = self;
04 //關(guān)閉閃光燈
05 readerView.torchMode = 0;
06 //掃描區(qū)域
07 CGRect scanMaskRect = CGRectMake(60, CGRectGetMidY(readerView.frame) - 126, 200, 200);
08     
09 //處理模擬器
10 if (TARGET_IPHONE_SIMULATOR) {
11     ZBarCameraSimulator *cameraSimulator
12         = [[ZBarCameraSimulator alloc]initWithViewController:self];
13     cameraSimulator.readerView = readerView;
14 }
15 [self.view addSubview:readerView];
16 //掃描區(qū)域計算
17 readerView.scanCrop = [self getScanCrop:scanMaskRect readerViewBounds:self.readerView.bounds];
18  
19 [readerView start];

以上代碼需要說明的有以下幾點:

閃光燈設(shè)置

我不希望在掃描二維碼時開啟閃光燈,所以將ZBarReaderView的torchMode設(shè)為0,你可以將它設(shè)置為其他任何合適的值。

掃描區(qū)域計算

這點比較重要,我們常用的二維碼掃描軟件的有效掃描區(qū)域一般都是中央?yún)^(qū)域,其他部分是不 進行掃描的,ZBar可以通過ZBarReaderView的scanCrop屬性設(shè)置掃描區(qū)域,它的默認值是CGRect(0, 0, 1, 1),表示整個ZBarReaderView區(qū)域都是有效的掃描區(qū)域。我們需要把掃描區(qū)域坐標(biāo)計算為對應(yīng)的百度分?jǐn)?shù)坐標(biāo),也就是以上代碼中調(diào)用的 getScanCrop:readerViewBounds方法,親測沒有問題,如下所示:

01 -(CGRect)getScanCrop:(CGRect)rect readerViewBounds:(CGRect)readerViewBounds
02 {
03     CGFloat x,y,width,height;
04     
05     x = rect.origin.x / readerViewBounds.size.width;
06     y = rect.origin.y / readerViewBounds.size.height;
07     width = rect.size.width / readerViewBounds.size.width;
08     height = rect.size.height / readerViewBounds.size.height;
09     
10     return CGRectMake(x, y, width, height);
11 }

PS:在網(wǎng)上找到很多這個方法都是將橫坐標(biāo)和縱坐標(biāo)交叉,這樣是有問題的,仔細想一下就會明白。

初始化部分完成之后,就可以調(diào)用ZBarReaderView的start方法開始掃描了,需要讓你的類實現(xiàn) ZBarReaderViewDelegate協(xié)議,在掃描到二維碼時會調(diào)用delegate的對應(yīng)方法。最后,當(dāng)二維碼已經(jīng)識別時候,可以調(diào)用 ZBarReaderView的stop方法停止掃描。如下所示:

1 - (void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
2 {
3     for (ZBarSymbol *symbol in symbols) {
4         NSLog(@"%@", symbol.data);
5         break;
6     }
7     
8     [self.readerView stop];
9 }

好了,就這么多,是不是非常簡單?

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉