IOS开发(95)之百度地图API环境搭建

1 前言
由于工作需要,要开始捣腾百度地图了,今天上午初始牛刀,各种碰壁,无奈之下,中午睡了一觉,养精蓄锐,以备下午大战三百回合,所幸下午中午把百度地图Demo捣腾出来了,在此与大家分享,环境搭建教程,菜鸟专用,大神勿喷!

本文旨在帮助新手快速搭建ios版百度地图,官网有相关教程,可是太旧了,现在的xcode都更新到了4.6,他的教程应该是在4.3之前吧。估计新手在搭建的时候一定会遇到错误,按照我的教程一步一步,保证你花最少的时间,快速进行地图开发。

机器环境:mac os x 10.8.2
开发环境:xcode4.6
真机环境:iPod Touch4G 版本:6.1.2

 【注】:使用百度地图的SDK需要申请key,应用名称可随意写,前提是有百度账号,详情官网查看。


2 详述
2.1 官网下载最新的SDK开发包_iOS静态库文件 http://developer.baidu.com/map/sdkiosdev-download.htm
解压后如下图所示:

 

 
 

\

2.2 打开xcode,新建一个demo工程(或是在你现有的工程下),创建好后把下载的的inc,libs,mapapi.bundle三个文件夹导入到工程内,注意需要copy+destination,看我如下截图:

 

 
 

\

一定要勾选copy和create group 同时要添加到target。


2.3 几乎所有的第三方地图sdk都是依赖于apple自有的几个framework,所以这一步需要我们导入:CoreLocation.framework和QuartzCore.framework。导入方法如下:

 
 

\

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
此时如果.h导入BMapKit.h头文件,实例化BMKMapManager或是BMapView,一定会有如下的错误:

 

 
 

\

貌似提示:libbaidumapapi.a找不到,那么是路径的问题么?这就是大家常遇到的BMKMapManager错误。其实原理是系统无法链接到我们的地图静态库,解决办法如下文:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


2.4 上边是个小尝试和插曲,我们继续下一步,选中工程,target,切换到Build Setting标签,定位到other link flag,
输入:-all_load

 

 
 

\

2.5 现在需要设置一下链接库的环境变量,好让项目能顺利找到目录下的.a文件,选中工程,target,切换到build setting标签,定位到Library search Path ,如下图所示:

 
 

\

 

删除已有的三个,添加一个足矣(模拟器+真机):$(SRCROOT)/libs/Release$(EFFECTIVE_PLATFORM_NAME)
简单解释一下:
$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator,这个涉及环境变量的相关知识,我也不太懂,全是自己尝试出来的,大家直接copy我这行就行了。如下:

 

 
 

\

2.6 这个时候,静态库文件已经设置完毕,剩下的就只有代码工作了,由于需要key的验证,所以我们先需要使用BMKMapManager类,配置申请到的key,以得到授权。选中AppDelegate.h

[plain]  #import "BMapKit.h" //导入BMapKit.h 
  
 @interface AppDelegate : UIResponder <UIApplicationDelegate>{ 
 BMKMapManager* _mapManager; //实例化 
 } 

#import "BMapKit.h" //导入BMapKit.h

@interface AppDelegate : UIResponder <UIApplicationDelegate>{
 BMKMapManager* _mapManager; //实例化
}


选中AppDelegate.m,修改成.mm,(注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm))
【注意:如果没有mm,运行会大量报错的】
在AppDelegate.mm中的didFinishLaunchingWithOptions,加入如下代码:

[plain] - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
 { 
     // 要使用百度地图,请先启动BaiduMapManager 
     _mapManager = [[BMKMapManager alloc]init]; 
     // 如果要关注网络及授权验证事件,请设定generalDelegate参数 
     BOOL ret = [_mapManager start:@"3830003D1DAFE904D7226E48F2F488262D5B23D2" generalDelegate:nil]; 
     if (!ret) { 
         NSLog(@"manager start failed!"); 
     } 
     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 
     // Override point for customization after application launch. 
     self.viewController = [[[ZYViewController alloc] initWithNibName:@"ZYViewController" bundle:nil] autorelease]; 
     self.window.rootViewController = self.viewController; 
     [self.window makeKeyAndVisible]; 
     return YES; 
 } 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
     // 要使用百度地图,请先启动BaiduMapManager
  _mapManager = [[BMKMapManager alloc]init];
     // 如果要关注网络及授权验证事件,请设定generalDelegate参数
 BOOL ret = [_mapManager start:@"3830003D1DAFE904D7226E48F2F488262D5B23D2" generalDelegate:nil];
  if (!ret) {
   NSLog(@"manager start failed!");
  }
     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
     // Override point for customization after application launch.
     self.viewController = [[[ZYViewController alloc] initWithNibName:@"ZYViewController" bundle:nil] autorelease];
     self.window.rootViewController = self.viewController;
     [self.window makeKeyAndVisible];
     return YES;
 }


2.7 在需要显示地图的viewcontroller.m中加入如下代码:

[plain]  #import "ViewController.h" 
 #import "BMKMapView.h" 
  
 @interface ViewController () 
  
 @end 
  
 @implementation ViewController 
  
 - (void)viewDidLoad 
 { 
 [super viewDidLoad]; 
 BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)]; 
 self.view = mapView; 
 } 

#import "ViewController.h"
 #import "BMKMapView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
 {
 [super viewDidLoad];
 BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)];
 self.view = mapView;
 }


导入BMKMapView.h后,实例化BMKMapView类。


2.8 在AppDelegate中授权过后,可以随意在任意的Viewcontroller中使用Mapview了。
(当然,BMKMapManager授权也可以写到任意的ViewController中,但是这样的话,只能在这个ViewController中使用MapView,换其它类使用地图的话,还需再来授权,否则地图view会是黑屏):


真机截图:

 \

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值