• 在iOS中使用百度地图


    就如同在百度地图的文档中所说的一样,这么来。但是,有一个小疏忽。

    到添加完所需要的framework之后,一定要记得把你的(Class-Prefix)AppDelegate的后缀改成mm。

    估计百度的SDK中使用了c++,而源文件的后缀是mm才能支持编译c++。

    正好百度的文档忘记说这一点,但是他的Demo其实是这样的。

    引入百度MapAPI的头文件

    首先将百度MapAPI提供的头文件和静态库(.a)文件拷贝到您的工程目录下,在XCode中添加新的文件Group,引入百度MapAPI提供的头文件(请使用xcode 4.X以上平台)。

    在您需要使用百度MapAPI的文件中添加以下代码

    1. #import "BMapKit.h"   

    引入静态库文件

    百度MapAPI提供了模拟器和真机两中环境所使用的静态库文件,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下。有两种方式可以引入静态库文件:

    第一种方式:直接将对应平台的.a文件拖拽至XCode工程左侧的Groups&Files中,缺点是每次在真机和模拟器编译时都需要重新添加.a文件;

    第二种方式:使用lipo命令将设备和模拟器的.a合并成一个通用的.a文件,将合并后的通用.a文件拖拽至工程中即可,具体命令如下:
    lipo –create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a

    第三种方式:

    1.将API的libs文件夹拷贝到您的Application工程跟目录下

    2.在XCode的Project -> Edit Active Target -> Build -> Linking -> Other Linker Flags中添加-ObjC

    3.设置静态库的链接路径,在XCode的Project -> Edit Active Target -> Build -> Search Path -> Library Search Paths中添加您的静态库目录,比如"$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)",$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator

    注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"

    引入系统framework

    百度MapAPI中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的XCode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework。 添加方式:右键点击Xcode工程左侧的Frameworks文件夹,add->Existing Frameworks,在弹出窗口中选中这几个framework,点击add即可。

    引入mapapi.bundle资源文件

    mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。 添加方式:将mapapi.bundle拷贝到您的工程目录,直接将该bundle文件托拽至XCode工程左侧的Groups&Files中即可。若您需要替换定位、指南针的图标,请保留原文件名称,否则不显示替换的新图片,默认大头针标注与路线关键点的新图片名称可自定义名称。 
    SDK资源文件里存放的有:
    map.png map.png map.png map.png

    初始化BMKMapManager

    在您的AppDelegate.h文件中添加BMKMapManager的定义

    1. @interface BaiduMapApiDemoAppDelegate : NSObject <UIApplicationDelegate> {   
    2.        UIWindow *window;    
    3.        UINavigationController *navigationController;     
    4.        BMKMapManager* _mapManager;    
    5. }  

    在您的AppDelegate.m文件中添加对BMKMapManager的初始化,并填入您申请的授权Key,示例如下

    1. - (BOOL)application:(UIApplication *)application   
    2. didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       // 要使用百度地图,请先启动BaiduMapManager  
    3.     _mapManager = [[BMKMapManager alloc]init];   
    4. // 如果要关注网络及授权验证事件,请设定     generalDelegate参数  
    5.     BOOL ret = [_mapManager start:@"在此处输入您的授权Key"  generalDelegate:nil];  
    6.     if (!ret) {  
    7.         NSLog(@"manager start failed!");  
    8.     }  
    9. // Add the navigation controller's view to the window and display.  
    10.     [self.window addSubview:navigationController.view];  
    11.     [self.window makeKeyAndVisible];  
    12.    return YES;  
    13. }  

    创建BMKMapView

    在您的ViewController.m文件中添加BMKMapView的创建代码,示例如下

    1. - (void)viewDidLoad {  
    2.     [super viewDidLoad];  
    3.     BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];  
    4.     self.view = mapView;      
    5. }  

    自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法来控制BMKMapView的生命周期,并且在一个时刻只能有一个BMKMapView接受回调消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中调用BMKMapView的对应的方法,并处理delegate,代码如下:

    1. (void)viewWillAppear:(BOOL)animated    
    2. {    
    3.     [_mapView viewWillAppear];    
    4.     _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放    
    5. }    
    6. -(void)viewWillDisappear:(BOOL)animated    
    7. {    
    8.     [_mapView viewWillDisappear];    
    9.       _mapView.delegate = nil; // 不用时,置nil    
    10. }    

    编译,运行,效果如下图所示:


    map.png 
    默认地图已经可以支持多点触摸,双击放大,多点单击缩小等操作,并都附带动画效果。

  • 相关阅读:
    浏览器如何减少 reflow/repaint
    caller和callee的区别
    正则表达式中的2和1和3不仅分组还占位
    正则分组和捕获
    Javascript之BOM与DOM讲解
    Ubuntu14.04(nginx+php+mysql+vsftp)配置安装流程
    JS的类型转换
    typeof 和 instanceof
    ios对new Date() 的兼容问题
    module.exports 和 export default
  • 原文地址:https://www.cnblogs.com/sunshine-anycall/p/3367259.html
Copyright © 2020-2023  润新知