百度地图也是iOS开发工程中常用功能之一,随着iOSSDK的版本更新以及百度地图SDK的更新,现在的百度SDK的使用也发生了一些变化。本文背景iOSSDK8.3,百度地图SDK版本V2.0.2。本文参考文档为官方开发指南,开发时请仔细阅读。http://developer.baidu.com/map/index.php?title=iossdk
OK,下面开始介绍百度地图配置的详细步骤。
1.首先要有一个百度账号
注册地址:https://passport.baidu.com/v2/?reg&u=http%3A%2F%2Fdeveloper.baidu.com%2Fuser%2Freg
2.申请成为开发者
申请地址:http://developer.baidu.com/user/reg
3.创建应用以及申请key
地址:http://lbsyun.baidu.com/apiconsole/key
创建好之后,留意“访问应用(AK)”字段,工程里要用到。
4.下载百度开发包
下载地址:http://api.map.baidu.com/lbsapi/cloud/sdkiosdev-download.htm
下载开发包请阅读下载页面下面的使用说明
5.创建工程
工程名应与第三步创建的应用名称一致。
6.配置开发环境
(1)指定工程编译方式
静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将Xcode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++”。最简单的,你把Appdelegate.m改为Appdelegate.mm就可以了。
(2)引入BaiduMapAPI.framework
百度地图SDK提供了模拟器和真机两种环境所使用的framework,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下
开发者可根据需要只导入模拟器或真机其中的一个,也可以将两者合并后导入,合并方法:在终端输入命令:lipo -create Release-iphoneos/BaiduMapAPI.framework/BaiduMapAPI Release-iphonesimulator/BaiduMapAPI.framework/BaiduMapAPI -output Release-iphoneos/BaiduMapAPI.framework/BaiduMapAPI
此时Release-iphoneos文件夹下的BaiduMapAPI.framework即可同时用于真机和模拟器(可以使用lipo–info 命令检查framework所支持的架构)。
(3)引入所需的系统库
用到的库有:CoreLocation.framework、QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework共6个。
(4)环境配置
在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。
(5)引入mapapi.bundle资源文件
不知道在哪的同学可以到全部下载的SDK文件夹下的Sample这个demo里去取。
(6)引入头文件
在使用SDK的类引入头文件:
#import <BaiduMapAPI/BMapKit.h>//引入所有的头文件
#import <BaiduMapAPI/BMKMapView.h>//只引入所需的单个头文件
注意事项:在使用Xcode6进行SDK开发过程中,需要在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start failed)
7.创建基本地图,按官方文档即可
(1)初始化BMKMapManager
在您的AppDelegate.h文件中添加BMKMapManager的定义
@interface BaiduMapApiDemoAppDelegate : NSObject <UIApplicationDelegate>
{
UIWindow *window;
UINavigationController *navigationController;
BMKMapManager* _mapManager;
}
(2)在您的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;
}
(3)创建BMKMapView
在您的ViewController.m文件中添加BMKMapView的创建代码,示例如下
- (void)viewDidLoad
{
[super viewDidLoad];
BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
self.view = mapView;
}
(4)控制BMKMapView的生命周期
自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
}
(5)编译,运行,效果如下图所示:
百度地图支持多点触摸、双击放大、多点单击缩小、旋转等手势操作,此外自2.2.0版本起,支持相应的控制接口来开启/关闭这些手势操作。
注:百度地图iOS SDK自v2.2.0起,全面实现地图多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MultiMapViewDemo的介绍。