我使用百度地圖感覺就像是坑了爹一樣,總會出現各種問題,今天我在這個博客裡面寫寫百度地圖有可能出的坑。
------------------
首先百度上打百度地圖API然後點擊進去,點擊開發,點擊IOS地圖SDK。
------------------
進到這個界面先點相關下載
------------------
進到這個裡面,直接點全部下載(藍色按鈕),下載完成後解壓縮
------------------
解壓縮完成後是這個樣子的,然後打開
-------------------
最後那個.DS_store沒有用,你們別被誤導,那個是我的隱藏文件,
我不會隱藏。。。
我不會隱藏。。。
我不會隱藏。。。
把zip文件解壓縮,就是下面的兩個藍色文件夾
------------------- 之後,回到概述,概述下面有個獲取密鑰,點一下會跳轉,點擊創建應用 ------------------- 之後,應用名稱輸個你認識的名字,最好是工程的中文名,應用類型寫,IOS,SDK,安全碼,是你工程Bundle Identifier ------------------- 第三個那一長串英文字母,就是你的百度key這個你找個地方保存一下 ------------------- 回到百度地圖概述那裡,然後你點擊開發指南,直接點第三個注意事項,然後第四條和第五條,你需要注意一下,直接按照我圖片上
NSAppTransportSecurity
LSApplicationQueriesSchemes一填加就可以了,剩下的內容不用看,直接點到配置開發環境 ------------------- 之後到了配置開發環境之後,有一個自動配置,還有一個手動配置,我個人一直弄的是手動配置,我接下來寫的肯定也是手動配置,接下來,點你的文件夾,點右鍵,點show in finder,在finder中,點到文件夾裡面,你最好新建一個文件夾叫Frameworks,用來放.framework包 ------------------- 點開Frameworks這個文件夾,把這7個文件拖進去,然後回到你的工程。 如果沒法用的話,就刪掉,用add file to "文件名"的方法添加進去 ------------------- 把這個文件夾拖進去,裡面就有了這7個BaiduMap.framework了,然後添加系統庫, CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework、libsqlite3.0.tbd(xcode7以前為 libsqlite3.0.dylib)、CoreTelephony.framework 、libstdc++.6.0.9.tbd(xcode7以前為libstdc++.6.0.9.dylib)。 添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加 ------------------- 然後在TARGETS->Build Settings->Other Linker Flags 中添加 -ObjC 再下一步,你點著Frameworks這個文件夾,點右鍵,有一個Add File to "項目名",你點擊一下,找到你之前放7個BaiduMap庫的文件夾,點這幾個庫,找到一個有Resources文件的庫,點文件夾,點擊add,你工程裡面就有了mapapi.bundle ------------------- 然後添加頭文件,如果頭文件報錯的話,就手打一遍,Xcode裡面有的時候會出現,不手打就找不到的情況。
#import//引入base相關所有的頭文件 #import //引入地圖功能所有的頭文件 #import //引入檢索功能所有的頭文件 #import //引入雲檢索功能所有的頭文件 #import //引入定位功能所有的頭文件 #import //引入計算工具所有的頭文件 #import //引入周邊雷達功能所有的頭文件 #import //只引入所需的單個頭文件
------------------- 然後在你的 AppDelegate.h 裡面添加代理和屬性 ------------------- 在AppDelegate.m上,改名,改成AppDelegate.mm 百度地圖文檔上要求做的,“為什麼”我沒看~ 接下來,請把下面的內容復制
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 要使用百度地圖,請先啟動BaiduMapManager _mapManager = [[BMKMapManager alloc]init]; // 如果要關注網絡及授權驗證事件,請設定 generalDelegate參數 BOOL ret = [_mapManager start:@"在此處輸入您的授權Key" generalDelegate:nil]; if (!ret) { NSLog(@"manager start failed!"); } // Add the navigation controller's view to the window and display. [self.window addSubview:navigationController.view]; [self.window makeKeyAndVisible]; return YES; }如果你要添加地圖功能的話,就在你要用的那個視圖上,打
- (void)viewDidLoad { [super viewDidLoad]; BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)]; self.view = mapView; }
(void)viewWillAppear:(BOOL)animated { [_mapView viewWillAppear]; _mapView.delegate = self; // 此處記得不用的時候需要置nil,否則影響內存的釋放 } -(void)viewWillDisappear:(BOOL)animated { [_mapView viewWillDisappear]; _mapView.delegate = nil; // 不用時,置nil }地圖完成了,如果需要其他功能去這個網址上找 http://lbsyun.baidu.com/index.php?title=iossdk/guide/hellobaidumap ---------------------- 接下來,我要說下更加坑爹的定位,這個也是我用到百度地圖一直用到的功能,如果你想在一開始就得到定位請求的話,你需要在AppDelegate裡面寫這個內容
//初始化BMKLocationService _locService = [[BMKLocationService alloc]init]; _locService.delegate = self; //啟動LocationService [_locService startUserLocationService];然後寫
//實現相關delegate 處理位置信息更新 //處理方向變更信息 - (void)didUpdateUserHeading:(BMKUserLocation *)userLocation { //NSLog(@"heading is%@",userLocation.heading); } //處理位置坐標更新 - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation { //NSLog(@"didUpdateUserLocation lat%f,long%f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude); }如果不調用的話,請在info.plist裡面添加 NSLocationAlwaysUsageDescription