这次来想说的是,在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选择自己要用的功能
- 文章2305
- 用户1336
- 访客11455720
没有努力,天份不代表什么。
MySQL 数据库优化
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de
免ROOT实现模拟点击任意位置
Mobaxterm终端神器
CreateProcessW要注意的细节问题
Autonomous NAT Traversal
【教程】win10 彻底卸载edge浏览器
eclipse工程基于Xposed的一个简单Hook
排名前5的开源在线机器学习
Mac OS最简单及(Karabiner)快捷键设置
发一款C++编写的麻将
VMware NAT端口映射外网访问虚拟机linux
独家发布最新可用My-AutoPost——wordpress 采集器