iOS开发-集成百度地图(OC语言)

2018-03-27  本文已影响1779人  小y想吃糖

一、申请安全码

图1-1 申请安全码

二、导入SDK,添加依赖库

1、根据项目需求(定位?路径规划?)下载所需要的SDK包,传送门:下载百度地图SDK,并拖进项目中。

图2-1 导入SDK

2、添加依赖库

(1)如图打开该位置Targets——>Bulid Phases——>Link Binary With Libraries

图2-2 打开添加依赖库的位置

(2)添加以下依赖库

图2-3 手动添加依赖库

(3)添加百度地图SDK中的库文件

方法:Targets——>Bulid Phases——>Link Binary With Libraries,点击“+”,点击Add Other...,从拖进项目的SDK包中寻找到对应的.a文件加入。

图2-4 添加百度SDK的库文件(1) 图2-5 添加百度SDK的库文件(2)

(4)运行一下,如果没有报错说明导入成功,如果报错,比如图2-7的错误,请仔细检查是否导入依赖库的时候遗漏了。

图2-7 导入依赖库文件遗漏报错

(5)引入mapapi.bundle资源文件(摘抄百度地图集成文档)

如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。

添加方法: 选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI_Map.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

图2-8 引入mapapi.bundle资源文件

(6)环境配置

(1)在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC,字母O和C大写。

(2)在TARGETS->Build Settings->Compile Sources As 改成Object-C++,并且把AppDelegate.m文件改为AppDelegate.mm。(不然你会崩溃的)

三、部署代码

在使用SDK的类 按需 引入下边的头文件:

图3-1 导入头文件

1、初始化BMKMapManager

在您的AppDelegate.h文件中添加BMKMapManager的定义

@interface AppDelegate : UIResponder {

      UINavigationController *navigationController;   

      BMKMapManager* _mapManager;    }

然后,在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中加入以下代码来初始化百度导航SDK

_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];

如果需要加入语音导航,那么还需要去申请TTS,传送门:百度TTS申请(语音播报),拿到App ID。

图3-2 申请TTS

拿到App ID后可以设置语音播报了。

[BNCoreServices_Instance setTTSAppId:kBDMapTTSAppID];

2.在需要弹出地图的VC中设置

设置.m文件

创建BMKMapView

BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:self.view.bounds];

 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    }

>>>>遇到问题

1>-[__NSCFString uuid_stringFromMD5]: unrecognized selector sent to instance 0x1c466cdc0

解决方案:build setting ——> other linker flags 添加-all_load

上一篇下一篇

猜你喜欢

热点阅读