我使用百度地圖感覺就像是坑了爹一樣,總會出現各種問題,今天我在這個博客裡面寫寫百度地圖有可能出的坑。
------------------
首先百度上打百度地圖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
你的定位系統就調用啦,本次就先寫到這裡吧,等有新的問題,接著更新