iOS开发---百度地图配置流程,2.6.0 版本 支持64位

时间:2022-09-22 14:59:21
 
1.首先需要在百度地图下载最新SDK:地址: http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download
2. 下载如图
iOS开发---百度地图配置流程,2.6.0  版本  支持64位
3.下载完成后找到响应的文件解压看到这个有着BaiduMap_...v2.6.0_Lib 的文件
iOS开发---百度地图配置流程,2.6.0  版本  支持64位
4.将上面的库文件导入到工程,但是需要做一个处理,我们一般是需要把.a文件处理合并一下再来的,百度给我们提供的有方法,只需要在终端进行如下命令

百度地图SDK提供了模拟器和真机两中环境所使用的静态库文件,分别存放在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++"

合并.a文件如图所示,合并之后你要找到那个.a文件所以最好新建一个文件夹

iOS开发---百度地图配置流程,2.6.0  版本  支持64位
iOS开发---百度地图配置流程,2.6.0  版本  支持64位

iOS开发---百度地图配置流程,2.6.0  版本  支持64位

5.合并之后的库文件可以将其导入到工程如图

iOS开发---百度地图配置流程,2.6.0  版本  支持64位
6.添加到工程之后编译一下,检查一下错误

iOS开发---百度地图配置流程,2.6.0  版本  支持64位
7.编译之后,没错误的话,添加如下库

百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework。 添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个framework即可。

位置在如图

iOS开发---百度地图配置流程,2.6.0  版本  支持64位
8.每次添加完成后都要编译运行一下,确保这次没有错误,添加到这个地方还是没有结束,还要配置一些文件,百度地图也给我们提示了在iOS8推出之后,我们要在info.plist文件添加如下信息,用于提示用户是否允许授权定位

iOS开发---百度地图配置流程,2.6.0  版本  支持64位

iOS开发---百度地图配置流程,2.6.0  版本  支持64位

自iOS SDK v2.5.0起,为了对iOS8的定位能力做兼容,做了相应的修改,开发者在使用过程中注意事项如下: 需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):

NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述

NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述

在使用Xcode6进行SDK开发过程中,需要在info.plist中添加:Bundle display name ,且其值不能为空(Xcode6新建的项目没有此配置,若没有会造成manager start failed)

百度地图iOS SDK v2.5.0起,对arm64进行了支持适配,开发包体积有所增加。但根据开发者在研发过程中的选择,最终生成的APP体积并不会发生较大的变化。

app在前后台切换时,需要使用下面的代码停止地图的渲染和openGL的绘制:

- (void)applicationWillResignActive:(UIApplication *)application { [BMKMapViewwillBackGround];//当应用即将后台时调用,停止一切调用opengl相关的操作 } - (void)applicationDidBecomeActive:(UIApplication *)application { [BMKMapViewdidForeGround];//当应用恢复前台状态时调用,回复地图的渲染和opengl相关的操作 }

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

(void)viewWillAppear:(BOOL)animated  {  [_mapView viewWillAppear]; _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放  }  -(void)viewWillDisappear:(BOOL)animated  {  [_mapView viewWillDisappear]; _mapView.delegate =nil; // 不用时,置nil  }
如果您只在Xib文件中使用了BMKMapView,没有在代码中使用BMKMapView,编译器在链接时不会链接对应符号,需要在工程属性中显式设定:在Xcode的Project -> Edit Active Target -> Build -> Linking -> Other Linker Flags中添加-ObjC
静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将Xcode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"
 
9.如上添加完毕,我们还要在百度开放平台申请一个key
iOS开发---百度地图配置流程,2.6.0  版本  支持64位

iOS开发---百度地图配置流程,2.6.0  版本  支持64位

10.添加完成后,提交后会看到APPkey
11.然后我们到工程里面,将我们的APPdelegate.m->改为
APPdelegate.mm   
12.在.h文件中导入百度地图管理类头文件

#import

#import "BMapKit.h"

@interface AppDelegate : UIResponder <</span>UIApplicationDelegate,BMKGeneralDelegate>//BMKGeneralDelegate  这个是检测网络和授权的代理,打开可以使用代理方法

{

BMKMapManager * _mapManager;

}

@property (strong, nonatomic) UIWindow *window;

@end

13.在.mm文件中如下

#import "AppDelegate.h"

@interface AppDelegate ()<</span>BMKMapViewDelegate>

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

_mapManager = [[BMKMapManager alloc]init];

BOOL ret = [_mapManager start:@"DdDXr28lncIfpna2hBids0ZV"generalDelegate:self];

if (!ret)

{

NSLog(@"manager started  faile");

}

return YES;

}

- (void)onGetNetworkState:(int)iError

{

if (0 == iError) {

NSLog(@"联网成功");

}

else{

NSLog(@"onGetNetworkState %d",iError);

}

}

- (void)onGetPermissionState:(int)iError

{

if (0 == iError) {

NSLog(@"授权成功");

}

else {

NSLog(@"onGetPermissionState %d",iError);

}

}

- (void)applicationWillResignActive:(UIApplication *)application {

[BMKMapView willBackGround ];//关闭渲染

}

- (void)applicationDidBecomeActive:(UIApplication *)application {

[BMKMapView didForeGround];//开始渲染

}

 
14.在控制器的.h文件添加如下

#import

#import "BMapKit.h"

#import "BMKLocationComponent.h"

@interface ViewController :UIViewController<</span>BMKLocationServiceDelegate>

{

//定位服务类

BMKLocationService *_locService;

}

@end

15.

#import "ViewController.h"

@interface ViewController ()<</span>BMKMapViewDelegate>

{

BMKMapView * _mapView ;

}

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

//指定地图初始位置中心

CLLocationCoordinate2D coor;

coor.latitude = 121.5290310;

coor.longitude = 31.2085760;

_mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 200, 320,200)];

_mapView.delegate =self;

_mapView.mapType = BMKMapTypeStandard;

_mapView.zoomLevel = 16;

_mapView.centerCoordinate = coor;

//    _mapView.showMapScaleBar = YES;

//    _mapView.showsUserLocation = NO;

_mapView.userTrackingMode = BMKUserTrackingModeFollowWithHeading;

// _mapView.showsUserLocation = YES;

[self.view addSubview:_mapView];

}

- (void)viewDidAppear:(BOOL)animated

{

//设置定位精确度,默认:kCLLocationAccuracyBest

// [BMKLocationService setLocationDesiredAccuracy:kCLLocationAccuracyBest];

//[BMKLocationServicesetLocationDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];

//指定最小距离更新(米),默认:kCLDistanceFilterNone

// [BMKLocationService  setLocationDistanceFilter:100.f];

//初始化BMKLocationService

//    _locService = [[BMKLocationService alloc]init];

//    _locService.delegate = self;

//    //启动LocationService

//    [_locService startUserLocationService];

_locService = [[BMKLocationService alloc]init];

_locService.delegate = self;

// [_locService startUserLocationService];

// [BMKLocationService getCurrentLocationDesiredAccuracy];

}

- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation

{

_mapView.showsUserLocation = YES;//显示定位图层

[_mapView updateLocationData:userLocation];

[_mapView setCenterCoordinate:userLocation.location.coordinate];

}

16,另外一种写法如下

_mapView.mapType = BMKMapTypeStandard;

NSLog(@"百度地图加载成功");

_mapView.showMapScaleBar = true;//显示比例尺

//定义比例尺的位置

_mapView.mapScaleBarPosition = CGPointMake(10, KHeight - 50);

//地图随手指移动

_mapView.scrollEnabled = true;

//设置地图的俯视角度,手机上的可使用范围是-45~0度

_mapView.overlooking = -30;

//初始化

BMKMapStatus *mapStatus = [[BMKMapStatus alloc]init];

//设置缩放级别

mapStatus.fLevel = 16;

//设置旋转角度

//mapStatus.fRotation = 90;

//设置俯视角度

mapStatus.fOverlooking = 0;

//设置缩放和旋转的中心点,一下两种方式任选一种即可

//1.设置屏幕坐标点

//mapStatus.targetScreenPt = CGPointMake(100, 30);

//2.设置地理坐标点,*坐标(39.914855,116.403882)

mapStatus.targetGeoPt = CLLocationCoordinate2DMake(39.914855,116.403882);

//改变地图状态,有三种方式

//    [_mapView setMapStatus:mapStatus];

//    [_mapView setMapStatus:mapStatus withAnimation:YES];

[_mapView setMapStatus:mapStatus withAnimation:YESwithAnimationTime:2000];

//测距

BMKMapPoint pointFrom;

BMKMapPoint pointTo;

pointFrom = BMKMapPointMake(20, 120);

pointTo = BMKMapPointMake(60, 189);

CLLocationDistance meter = BMKMetersBetweenMapPoints(pointFrom, pointTo);

NSLog(@"计算得到的距离是%f",meter);

//添加大头针

if(pointAnnotation == nil){

[self addPointAnnotation];

}

//定位用户位置

BMKLocationViewDisplayParam * testparam = [[BMKLocationViewDisplayParam alloc]init];

testparam.isRotateAngleValid = true;

testparam.isAccuracyCircleShow = true;

testparam.locationViewImgName = @"icon_compass";

testparam.locationViewOffsetX = 0;

testparam.locationViewOffsetY = 0;

[_mapView updateLocationViewWithParam:testparam];

_mapView.showsUserLocation = NO;

_mapView.userTrackingMode = BMKUserTrackingModeFollow;

_mapView.showsUserLocation = YES;

17添加大头针

-(void)addPointAnnotation

{

pointAnnotation = [[BMKPointAnnotation alloc]init];

CLLocationCoordinate2D coor;

coor.latitude = 39.914855;

coor.longitude =116.403882;

pointAnnotation.coordinate = coor;

pointAnnotation.title = @"test";

pointAnnotation.subtitle = @"此Annotation可拖拽";

[_mapView addAnnotation:pointAnnotation];

}

18.添加大头针泡泡

-(BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id<<span style="font-variant-ligatures: no-common-ligatures; color: #4f8187">BMKAnnotation>)annotation{

static NSString *AnnotationViewID = @"renameMark";

//    if (newAnnotation == nil) {

//        newAnnotation = [[BMKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];

//        //设置颜色

//        ((BMKPinAnnotationView *)newAnnotation).pinColor = BMKPinAnnotationColorGreen;

//        //从天上掉下来的效果

//        ((BMKPinAnnotationView *)newAnnotation).animatesDrop = YES;

//        //设置可拖拽

//        ((BMKPinAnnotationView *)newAnnotation).draggable = YES;

//    }

if (newAnnotation == nil) {

newAnnotation = [[BMKAnnotationViewalloc]initWithAnnotation:annotationreuseIdentifier:AnnotationViewID];

//设置颜色

((BMKPinAnnotationView *)newAnnotation).pinColor =BMKPinAnnotationColorGreen;

//从天上掉下来的效果

((BMKPinAnnotationView *)newAnnotation).animatesDrop =YES;

//设置可拖拽

((BMKAnnotationView *)newAnnotation).draggable = YES;

UIView *customView = [[UIViewalloc]initWithFrame:CGRectMake(0, 0, 100, 100)];

customView.backgroundColor = [UIColor orangeColor];

BMKActionPaopaoView *test = [[BMKActionPaopaoView alloc]initWithCustomView:customView];

((BMKPinAnnotationView *)newAnnotation).paopaoView = test;

}

return newAnnotation;

}

19,以上仅是自己遇到了一些问题,不是很全,因为功能不需要太多,这个只是适合菜鸟学习的,大牛们可以忽略,也希望大牛们多给我留言,学习更深的技术。

iOS开发---百度地图配置流程,2.6.0 版本 支持64位的更多相关文章

  1. iOS开发——百度地图SDK集成

    (正在形成文档,待更新……)

  2. fir&period;im Weekly - iOS开发中的Git流程

    本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码等好用的*,还有一些 APP 设计的 Tips,希望对你有用. 精仿知乎日报 iOS 端 @我偏 ...

  3. 李洪强iOS开发Swift篇—06&lowbar;流程控制

    李洪强iOS开发Swift篇—06_流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注 ...

  4. &lbrack;正确配置&rsqb;win7 PL&sol;SQL 连接Oralce 11g 64位

    PL/SQL 版本号:15.0.5.1710 32位 win7 64位系统 instantclient 12.1 32位,PL/SQL不支持64位 关键问题 1.Not logged on 2.没有c ...

  5. iOS开发系列--地图与定位

    概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...

  6. Android开发百度地图(一)--显示基本地图

    最近由于比赛的需要,自己学习了一下百度地图的开发.希望以下的内容能够对大家有用. 一.开发前的准备工作: 1.注册百度账号,并登录.(有百度账号的话直接登录) 2.申请Key,地址:http://de ...

  7. iOS集成百度地图方法步骤

    前言:app中的导航功能越来越流行,现在我自己做的项目中也有此需求,做过了后记录下笔记.  由于源代码保密所以这里仅仅提供demo,下面是效果图 一:iOS地图SDK 1.打开 百度地图api链接 i ...

  8. 转-iOS开发系列--地图与定位

    来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功 ...

  9. ios添加百度地图方法

    Hello BaiduMapiOS SDK 引入头文件 引入静态库文件 引入系统framework 引入mapapi.bundle资源文件 初始化BMKMapManager 创建BMKMapView ...

随机推荐

  1. 迷你DVD管理器

    import java.text.*; import java.util.*; class DVDSet { String[] name=new String[50]; //定义一个DVD数组 boo ...

  2. Linux时间函数

    一.时间编程 1.核心理论 (1).时间类型 2.函数学习 (1).获取日历时间 函数名:time 函数原型:time_t time(time_t *t) 函数功能:获取当前日历时间 所属头文件:&l ...

  3. oracle手动删除数据库

    有时候,无法使用图形界面时,我们需要手动删除数据库,具体操作步骤如下:一.手动删除文件系统数据库   1.停止监听,防止有新的连接产生,同时,在数据库配置了em的,也需要停止 $ lsnrctl st ...

  4. &lbrack;js&rsqb; 实现接口

    摘要 js 语言并没有interface implement 关键字,如果要做到和后端语言类似的接口,一般会需要模拟实现. 在oo 编程中, 接口可以让架构师规定好模块必须要实现的方法, 尽量解耦模块 ...

  5. &lbrack;翻译&rsqb; C&num; 8&period;0 预览

    原文: C# 8.0 Previewed 在一个Channel 9 的视频中,Mads Torgersen展示了C#8的首批四个新特性. 可空引用类型 过去我们报道过可空引用类型,简单地说,默认情况下 ...

  6. ANSI 和 UNICODE 的函数对应表

    ANSI        UNICODE           通用(char.h)    (wchar.h)        (tchar.h) char         wchar_t         ...

  7. F&num;周报2019年第16期

    新闻 Ionide试验版本 FSharp路线图介绍 Blazor官方预览 .NET Framework 4.8发布 .NET Core 3 Preview 4发布 需要来自FSharp.Data.Sq ...

  8. 家庭版Windows10没有远程桌面的问题

    https://github.com/stascorp/rdpwrap/releases

  9. 配置babel

    配置babel ECMAScript的版本,每年都会定期举行会议,发布各种标准,当前版本到了2019,但大部分人使用的浏览器,都可以支持es2015,也就是es6,要等到大部分浏览器都支持到最新版本, ...

  10. java程序连接oracle12c报:java&period;sql&period;SQLException&colon; ORA-28040&colon; 没有匹配的验证协议。

    报错信息: 2017-09-22 15:17:37,204 WARN [org.hibernate.cfg.SettingsFactory] - Could not obtain connection ...