天天看点

在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