这次来想说的是,在iOS项目中集成百度地图,下一篇可能会写在iOS项目中集成第三方登陆相关,给个预告,呵呵.
闲话少说,开搞:
这次我们项目中的需求其实简单,简单说下,由于我们公司的项目是教育这块的,所以如果你发布一个课程,那么需要给用户标记你的课程地址,这里我们用上到了百度地图,还有一块就是在课程的详情里,服务器在你标记课程地址时候上传给服务器一个经纬度,服务器根据经纬度生成一张图片显示在课程详情里,当用户点击了这个课程详情里的图片时候跳转到另外一个地图界面,并且在课程的地址标记出来,其实如果你看过百度的API Demo的话,就可以知道这两个功能如何实现需要用到两块,一块是POI搜索功能,还有一块是地理编码功能...好了,介绍完毕,开始详细的上代码.
一:第一部分 主要说一些准备以及配置方面的问题
1 使用百度地图,首先我们要申请百度APPKEY,点击这个网址来申请http://lbsyun.baidu.com/apiconsole/key 然后创建应用
跳转到:
1 应用名称可以随便写, 2 选择iOS SDK, 3的安全码记得填写项目中的Bundle Identifier,如图查找:
点击提交,就会得到一个访问应用的AK...先复制到文本备用..
2 第二步去下载SDK包
下载地址:http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download
3 第三步我们就需要配置环境了
3.1导入头文件
解压缩Lib文件,其中inc文件夹内的.h文件即为需要导入头文件,将inc文件夹拷入到您的工程根目录下
3.2 设置路径
设置头文件的链接路径,在Xcode的Project -> Edit Active Target -> Build Settings -> Search Path -> Header Search Paths中添加头文件目录: "$(SRCROOT)/inc" 其中$(SRCROOT)宏代表您的工程文件所在目录。如图:
3.3 导入静态库文件,如果你下载了百度开发指南,可以看到有三种方式,因为百度MapAPI提供了模拟器和真机两种环境所使用的静态库文件,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下,其中[Release-iphonesimulator]文件夹下的libbaidumapapi.a为模拟器环境下使用的静态库文件,[Release-iphoneos]文件夹下的libbaidumapapi.a为真机环境下使用的静态库文件。这里我推荐使用的是合并.a文件的方式,具体实施如下:
3.3.1 先获取[Release-iphoneos]文件夹和[Release-iphonesimulator]文件夹所在位置并拷贝
3.3.2 使用lipo命令(在终端中)将设备和模拟器的.a合并成一个通用的.a文件,利用这个命令:
lipo -create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a -output libbaidumapapi.a
3.3.3 合并成功后会在libs文件夹下生成一个libbaidumapapi.a文件
3.3.4 将生成的libbaidumapapi.a文件拷贝到工程根目录并导入即可
4 第四步 导入framework
4.1在XCode的Project -> Edit Active Target -> Build Phases ->Link Binary With Libraries->点击下方的[+]添加即可,如图
4.2、添加以下.framework文件: 百度地图API中提供了定位功能和动画效果,V2.0.0版本开始使用OpenGL渲染,因此必须引入CoreLocation.framework、QuartzCore.framework、SystemConfiguration.framework、CoreGraphics.framework、OpenGLES.framework; V2.0.2版本新增短串分享功能,如果您使用了通过信息来进行短串分享的功能,需要额外引入MessageUI.framework,如果您没有用到该功能则不需要引入; V2.1.0版本开始对iOS7系统下的IMEI(设备唯一标识)进行了适配,因此使用V2.1.0及以上版本必须要额外引入Security.framework;
5.导入资源文件
5.1、将资源文件mapapi.bundle拷贝到您的工程根目录并导入至工程
5.2 如果不需要使用内置的图片显示功能,则可以删除bundle文件中的images文件夹,您也可以根据具体需求任意替换或删除该bundle中images文件夹的图片文件。 注意:若需要替换定位、指南针的图标,请保留原文件名称,否则不显示替换的新图片,默认大头针标注与路线关键点的新图片名称可自定义名称。
6.一些其他配置
6.1、静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件,您可以采取以下两种方法的任意一种来修改您的工程文件:
(1) 将任意一个.m后缀的文件改名为.mm;(推荐使用这个方法,在使用到百度地图的类的.m文件修改为.mm即可)
(2) 在工程属性中指定编译方式,即将Xcode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++";(不推荐使用这个方法,在我自己项目中最开始我使用了这个方法,造成大量错误,因为其他类库可能没有用C++来编译)
6.2、如果您只在Xib文件中使用了BMKMapView,没有在代码中使用BMKMapView,编译器在链接时不会链接对应符合,需要在工程属性中显式设定:在Xcode的Project -> Edit Active Target -> Build Settings -> Linking -> Other Linker Flags中添加"-ObjC";(这个我没有测试,因为公司项目没有用到xib)
6.3、如果使用Xcode5开发基于iOS7的百度地图应用时,请将Xcode5的Project -> Edit Active Target -> Build Settings -> Linking -> Other Linker Flags中的"-ObjC"修改为"-all_load";(我公司的项目开发时候是Xcode6以及iOS8下,我也没有测试Xcode5以及iOS7下的情况,但是以我公司的环境,这里如果设置了,也会报错造成项目无法运行)
以上就是配置方面的啦,配置好了,后面代码就比较好做了,否则坑的是自己哇.....
第二部分:开始代码编写,根据需求来对照百度地图Demo选择自己要用的功能
- 文章2300
- 用户1336
- 访客10863260
真正的成功是激励他人行动。