1.导入系统库 添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个系统库即可。
CoreLocation.framework、
QuartzCore.framework、
OpenGLES.framework、
SystemConfiguration.framework、
CoreGraphics.framework、
Security.framework、
libsqlite3.0.tbd(xcode7以前为 libsqlite3.0.dylib)、
CoreTelephony.framework 、
libstdc++.6.0.9.tbd(xcode7以前为libstdc++.6.0.9.dylib)。
导入百度框架
BaiduMapAPI_Base.framework
BaiduMapAPI_Location.framework
BaiduMapAPI_Map.framework
第四步、引入mapapi.bundle资源文件
如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。
方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI_Map.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
2.在TARGETS->Build Settings->Other Linker Flags 中添加-Objc。
3.百度地图框架拖进工程里面
3.静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即在Xcode的Project -> Edit Active Target -> Build Setting 中找到 Compile Sources As,并将其设置为"Objective-C++"
4.Info.plist文件里添加
Bundle display name 项目名
NSLocationAlwaysUsageDescription 空
NSLocationWhenInUseUsageDescription 空
代码:
1.
#import
#import//引入base相关所有的头文件
#import//引入地图功能所有的头文件
@interfaceAppDelegate : UIResponder
{
// UIWindow *window;
UINavigationController*navigationController;
BMKMapManager* _mapManager;
}
@property(strong,nonatomic)UIWindow*window;
@end
2.
- (BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {//要使用百度地图,请先启动BaiduMapManager
_mapManager= [[BMKMapManageralloc]init];
//如果要关注网络及授权验证事件,请设定generalDelegate参数
BOOLret = [_mapManagerstart:@"SYEQevXO4Mt538X6O8iCLSEyPdEi5OrV"generalDelegate:nil];
if(!ret) {
NSLog(@"manager start failed!");
}
// Add the navigation controller's view to the window and display.
[self.windowaddSubview:navigationController.view];
[self.windowmakeKeyAndVisible];
returnYES;
}
3.
#import
#import//引入base相关所有的头文件
#import//引入地图功能所有的头文件
#import
//#import
//#import
@interfaceViewController :UIViewController
{
BMKMapManager*_mapManager;//声明一个地图管理
BMKMapView*_mapView;//声明一张地图
BMKPointAnnotation*_annotation;//声明一个标注
BMKLocationService*_locService;
}
@end
4.
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_mapView= [[BMKMapViewalloc]initWithFrame:CGRectMake(0,0, [UIScreenmainScreen].bounds.size.width, [UIScreenmainScreen].bounds.size.height)];
self.view=_mapView;
//初始化BMKLocationService
_locService= [[BMKLocationServicealloc]init];
_locService.delegate=self;
//启动LocationService
[_locServicestartUserLocationService];
//在地图中添加一个PointAnnotation
_annotation= [[BMKPointAnnotationalloc]init];
_annotation.title=@"test";
_annotation.subtitle=@"this is a test!";
[_mapViewaddAnnotation:_annotation];//个人猜测,当执行此句代码时,将会调用- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id )annotation方法
}
-(void)viewWillAppear:(BOOL)animated
{
[_mapViewviewWillAppear];
_mapView.delegate=self;// 此处记得不用的时候需要置nil,否则影响内存的释放
}
-(void)viewWillDisappear:(BOOL)animated
{
[_mapViewviewWillDisappear];
_mapView.delegate=nil;// 不用时,置nil
}
//实现相关delegate处理位置信息更新
//处理方向变更信息
- (void)didUpdateUserHeading:(BMKUserLocation*)userLocation
{
NSLog(@"heading is %@",userLocation.heading);
if(userLocation !=nil) {
NSLog(@"%f %f", userLocation.location.coordinate.latitude, userLocation.location.coordinate.longitude);
// //将地图移动到当前位置
// float zoomLevel = 0.02;
// BMKCoordinateRegion region = BMKCoordinateRegionMake(userLocation.location.coordinate,BMKCoordinateSpanMake(zoomLevel, zoomLevel));
// [_mapView setRegion:[_mapView regionThatFits:region] animated:YES];
//大头针摆放的坐标,必须从这里进行赋值,否则取不到值,这里可能涉及到委托方法执行顺序的问题
CLLocationCoordinate2Dcoor;
coor.latitude= userLocation.location.coordinate.latitude;
coor.longitude= userLocation.location.coordinate.longitude;
_annotation.coordinate= coor;
}
}
处理位置坐标更新
//- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
//{
// NSLog(@"didUpdateUserLocation lat %f,long %f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
//}
- (BMKAnnotationView*)mapView:(BMKMapView*)mapView viewForAnnotation:(id)annotation
{
if([annotationisKindOfClass:[BMKPointAnnotationclass]]) {
BMKPinAnnotationView*newAnnotation = [[BMKPinAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:@"myAnnotation"];//初始化一个大头针标注
newAnnotation.pinColor=BMKPinAnnotationColorPurple;
newAnnotation.animatesDrop=YES;
newAnnotation.draggable=YES;
returnnewAnnotation;
}
returnnil;
}