就如同在百度地圖的文檔中所說的一樣,這麼來。但是,有一個小疏忽。
到添加完所需要的framework之後,一定要記得把你的(class-prefix)appdelegate的字尾改成mm。
估計百度的sdk中使用了c++,而源檔案的字尾是mm才能支援編譯c++。
正好百度的文檔忘記說這一點,但是他的demo其實是這樣的。
首先将百度mapapi提供的頭檔案和靜态庫(.a)檔案拷貝到您的工程目錄下,在xcode中添加新的檔案group,引入百度mapapi提供的頭檔案(請使用xcode 4.x以上平台)。
在您需要使用百度mapapi的檔案中添加以下代碼
#import "bmapkit.h"
百度mapapi提供了模拟器和真機兩中環境所使用的靜态庫檔案,分别存放在libs/release-iphonesimulator和libs/release-iphoneos檔案夾下。有兩種方式可以引入靜态庫檔案:
第一種方式:直接将對應平台的.a檔案拖拽至xcode工程左側的groups&files中,缺點是每次在真機和模拟器編譯時都需要重新添加.a檔案;
第二種方式:使用lipo指令将裝置和模拟器的.a合并成一個通用的.a檔案,将合并後的通用.a檔案拖拽至工程中即可,具體指令如下:
lipo –create release-iphoneos/libbaidumapapi.a release-iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a
第三種方式:
1.将api的libs檔案夾拷貝到您的application工程跟目錄下
2.在xcode的project -> edit active target -> build -> linking -> other linker flags中添加-objc
3.設定靜态庫的連結路徑,在xcode的project -> edit active target -> build -> search path -> library search paths中添加您的靜态庫目錄,比如"$(srcroot)/../libs/release$(effective_platform_name)",$(srcroot)宏代表您的工程檔案目錄,$(effective_platform_name)宏代表目前配置是os還是simulator
注:靜态庫中采用objectc++實作,是以需要您保證您工程中至少有一個.mm字尾的源檔案(您可以将任意一個.m字尾的檔案改名為.mm),或者在工程屬性中指定編譯方式,即将xcode的project -> edit active target -> build -> gcc4.2 - language -> compile sources as設定為"objective-c++"
百度mapapi中提供了定位功能和動畫效果,v2.0.0版本開始使用opengl渲染,是以您需要在您的xcode工程中引入corelocation.framework和quartzcore.framework、opengles.framework、systemconfiguration.framework、coregraphics.framework。 添加方式:右鍵點選xcode工程左側的frameworks檔案夾,add->existing frameworks,在彈出視窗中選中這幾個framework,點選add即可。
mapapi.bundle中存儲了定位、預設大頭針标注view及路線關鍵點的資源圖檔,還存儲了矢量地圖繪制必需的資源檔案。如果您不需要使用内置的圖檔顯示功能,則可以删除bundle檔案中的image檔案夾。您也可以根據具體需求任意替換或删除該bundle中image檔案夾的圖檔檔案。 添加方式:将mapapi.bundle拷貝到您的工程目錄,直接将該bundle檔案托拽至xcode工程左側的groups&files中即可。若您需要替換定位、指南針的圖示,請保留原檔案名稱,否則不顯示替換的新圖檔,預設大頭針标注與路線關鍵點的新圖檔名稱可自定義名稱。
sdk資源檔案裡存放的有:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SM2VGZz9Wavw1Ztl2LcNWa0FGdz9CXwFWbvwVbvNmL1RWahJmLyVGcvxWZ2VGZvw1LcpDc0RHaiojIsJye.jpg)
在您的appdelegate.h檔案中添加bmkmapmanager的定義
@interface baidumapapidemoappdelegate : nsobject <uiapplicationdelegate> {
uiwindow *window;
uinavigationcontroller *navigationcontroller;
bmkmapmanager* _mapmanager;
}
在您的appdelegate.m檔案中添加對bmkmapmanager的初始化,并填入您申請的授權key,示例如下
- (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;
在您的viewcontroller.m檔案中添加bmkmapview的建立代碼,示例如下
- (void)viewdidload {
[super viewdidload];
bmkmapview* mapview = [[bmkmapview alloc]initwithframe:cgrectmake(0, 0, 320, 480)];
self.view = mapview;
自2.0.0起,bmkmapview新增viewwillappear、viewwilldisappear方法來控制bmkmapview的生命周期,并且在一個時刻隻能有一個bmkmapview接受回調消息,是以在使用bmkmapview的viewcontroller中需要在viewwillappear、viewwilldisappear方法中調用bmkmapview的對應的方法,并處理delegate,代碼如下:
(void)viewwillappear:(bool)animated
{
[_mapview viewwillappear];
_mapview.delegate = self; // 此處記得不用的時候需要置nil,否則影響記憶體的釋放
}
-(void)viewwilldisappear:(bool)animated
[_mapview viewwilldisappear];
_mapview.delegate = nil; // 不用時,置nil
編譯,運作,效果如下圖所示:
預設地圖已經可以支援多點觸摸,輕按兩下放大,多點單擊縮小等操作,并都附帶動畫效果。
歡迎加群互相學習,共同進步。qq群:ios: 58099570 | android: 330987132 | go:217696290 | python:336880185 | 做人要厚道,轉載請注明出處!http://www.cnblogs.com/sunshine-anycall/p/3367259.html