引言:
二維碼的普及速度令人咋舌,現在隨處的實體廣告在邊角處都附上一張二維碼,提示使用者掃描相關資訊,瞭解更多,並且張小龍說,PC的入口在於搜尋方塊,而手機的入口在於二維碼.
因為二維碼解決了手機輸入資訊的困難.除了感歎人類的聰明之外,更多的是如何利用這已有的技術去滿足我們在應用上面的需求.
當然了,內部演算法不在本博文的介紹範圍內,主要介紹如何使用它.
參考資料:
1:開博來的第一篇文貼:zxing2.0二維碼在xcode4.2中的使用
http://blog.csdn.net/icash/article/details/7727299
2:ios中使用zxing遇到的問題
http://blog.csdn.net/zzfsuiye/article/details/8244917
3:讓ZXing 支援條碼掃描
http://hi.baidu.com/397362542/item/a574ce39b267fdd12f8ec23b
如何安裝:
1:ZXingWidget的託管地址如下:
http://code.google.com/p/zxing/downloads/list
2:關於庫裡的一些檔案
不是所有的檔案我們都用的到,
下載zxing2.0後,解壓得到zxing-2.0檔案夾,裡面只保留 cpp 和 iphone 兩個檔案夾就可以了。
3:我比較用WorkSpace(工作空間)的方式引入第三方資源
那麼有一步驟可以省去:
4:frameWorks添加如下幾項:
libZXingWidget.a
AddressBook
AddressBookUI
AudioToolbox
AVFoundation
CoreMedia
CoreVideo
libiconv.dylib
完成後如:
5:不要忘記設定一個掃描成功時的音頻檔案:
widController.soundToPlay = [NSURL fileURLWithPath:[mainBundle pathForResource:@"beep-beep" ofType:@"aiff"] isDirectory:NO];
6:保持項目的C++混編譯模式
首先請做如下操作:
1.請更改你的delegate檔案的.m檔案為.mm (請注意,如果你在項目中重新命名,並不會使實體路徑中的檔案名稱被更改,所以請更改物理檔案名稱)
MyZxingAppDelegate.m 改成
MyZxingAppDelegate.mm
2.請更改你要使用zxing的專案檔的.m檔案為.mm
MyZxingViewController.m
改成
MyZxing
ViewController
.mm
使用:
7:下載我的Demo 試試看:
XCode 4.6 iOS6.1 測試通過
Demo地址:猛擊此處!
可能遇到的問題:
1.如果你項目中使用了zxing,但是在xcdoe升級到4.5以後出現Incompatible pointer types sending 'Class' (aka 'Class *') to parameter of type 'id<NSCopying>'錯誤,解決辦法:重新下載更新版本的ZXing, 可以使用命令下載最新版本:svn
checkout http://zxing.googlecode.com/svn/trunk/ zxing-read-only。
2.如果出現了問題Undefined symbols for architecture
i386"std::string::c_str() const", referenced from。。。。,
將你項目中的Apple LLVM compiler 4.1 - language中的 c Language Dialect、c++ Language Dialect、c++ standard Library設定成所選的值。參考http://stackoverflow.com/questions/12665457/zxing-in-xcode-4-5-and-ios-6
3.編譯成功往真機上裝的時候出現Choose a destination with a supported architecture in order to run on this device ,由於ios裝置不支援armv7s,所以必須將Architectures設定為armv6,但是僅僅需要改動valid architectures就行,不要改動architectures,否則容易引起真機不運行。把architectures改為$(ARCHS_STANDARD_32_BIT)就可以撞到手機上了。見http://blog.sina.com.cn/s/blog_90a0ad8d01013uuh.html
4:XCode 手賤升級到了 4.6 ZXingSDK 編譯不過去了.
出現什麼變數聲明了沒有使用的編譯錯誤提示(可是明明使用了):
Member initializer 'bits_' does not name a non-static data member or base class
Google老外牛人多啊,或者說老外也遇到這個問題了,然後提問了,問答地址如下:
http://code.google.com/p/zxing/issues/detail?id=1494
裡面說到將 ZXingWidget - BuildSettings - Other Warning Flags 裡的 -Werror 和 -Wno-unused-parameter 去掉,
但其實只要去掉 -Werror 就可以了, 如果
-Wno-unused-parameter 這個也去掉了會產生很多變數沒有使用的警告.
此時可以編譯通過了,煩惱的是 也有少許警告.