天天看點

在iOS中使用百度地圖

就如同在百度地圖的文檔中所說的一樣,這麼來。但是,有一個小疏忽。

到添加完所需要的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資源檔案裡存放的有:

在iOS中使用百度地圖
在iOS中使用百度地圖
在iOS中使用百度地圖
在iOS中使用百度地圖

在您的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    

編譯,運作,效果如下圖所示:

在iOS中使用百度地圖

預設地圖已經可以支援多點觸摸,輕按兩下放大,多點單擊縮小等操作,并都附帶動畫效果。

歡迎加群互相學習,共同進步。qq群:ios: 58099570 | android: 330987132 | go:217696290 | python:336880185 | 做人要厚道,轉載請注明出處!http://www.cnblogs.com/sunshine-anycall/p/3367259.html

繼續閱讀