iOS开发---百度地图配置流程,2.6.0 版本 支持64位
3.下载完成后找到响应的文件解压看到这个有着BaiduMap_...v2.6.0_Lib 的文件
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文件所以最好新建一个文件夹
5.合并之后的库文件可以将其导入到工程如图
6.添加到工程之后编译一下,检查一下错误
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即可。
位置在如图
8.每次添加完成后都要编译运行一下,确保这次没有错误,添加到这个地方还是没有结束,还要配置一些文件,百度地图也给我们提示了在iOS8推出之后,我们要在info.plist文件添加如下信息,用于提示用户是否允许授权定位
自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
#import
#import "BMapKit.h"
@interface AppDelegate : UIResponder <</span>UIApplicationDelegate,BMKGeneralDelegate>//BMKGeneralDelegate 这个是检测网络和授权的代理,打开可以使用代理方法
{
BMKMapManager * _mapManager;
}
@property (strong, nonatomic) UIWindow *window;
@end
#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];//开始渲染
}
#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位的更多相关文章
- iOS开发——百度地图SDK集成
(正在形成文档,待更新……)
- fir.im Weekly - iOS开发中的Git流程
本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码等好用的轮子,还有一些 APP 设计的 Tips,希望对你有用. 精仿知乎日报 iOS 端 @我偏 ...
- 李洪强iOS开发Swift篇—06_流程控制
李洪强iOS开发Swift篇—06_流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注 ...
- [正确配置]win7 PL/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 ...
- iOS开发系列--地图与定位
概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.例如你到了一个 ...
- Android开发百度地图(一)--显示基本地图
最近由于比赛的需要,自己学习了一下百度地图的开发.希望以下的内容能够对大家有用. 一.开发前的准备工作: 1.注册百度账号,并登录.(有百度账号的话直接登录) 2.申请Key,地址:http://de ...
- iOS集成百度地图方法步骤
前言:app中的导航功能越来越流行,现在我自己做的项目中也有此需求,做过了后记录下笔记. 由于源代码保密所以这里仅仅提供demo,下面是效果图 一:iOS地图SDK 1.打开 百度地图api链接 i ...
- 转-iOS开发系列--地图与定位
来自: http://www.cnblogs.com/kenshincui/p/4125570.html#autoid-3-4-0 概览 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功 ...
- ios添加百度地图方法
Hello BaiduMapiOS SDK 引入头文件 引入静态库文件 引入系统framework 引入mapapi.bundle资源文件 初始化BMKMapManager 创建BMKMapView ...
随机推荐
- jQuery数组处理汇总
jQuery数组处理汇总 有段时间没写什么了, 打算把jquery中的比较常用的数组处理方法汇总一下 $.each(array, [callback])遍历,很常用 1 2 3 4 5 6 7 8 ...
- 记一次 Ubuntu 使用 arptables 抵御局域网 ARP 攻击
. . . . . 前段时间大概有一个月左右,租房的网络每天都断一次,每次断大概一两分钟左右就恢复了,所以没太在意.直到有一天晚上,LZ 正在写博客,但是网络频繁中断又重新连上再中断.待 LZ 好不容 ...
- [原创][LaTex]LaTex学习笔记入门
0. 简介 LaTEX(/ˈlɑːtɛx/,常被读作/ˈlɑːtɛk/或/ˈleɪtɛk/),文字形式写作LaTeX,是一种基于TEX的排版系统,由美国电脑学家莱斯利·兰伯特在20世纪80年代初期开发 ...
- Train Problem I hdu 1022(栈)
http://acm.split.hdu.edu.cn/showproblem.php?pid=1022 题意:给出火车的进站与出站顺序,判断是否可以按照给出的出站顺序出站. #include < ...
- [刘阳Java]_Java技术有哪些学习重点_第1讲
纵观网上有很多非常好的对Java技术的总结,这里我个人谈谈对Java技术学习有哪些重点内容[浮浅之见] Java环境搭建 Java基础语法 Java面向对象编程 Java异常 Java IO流 Jav ...
- golang使用interface来mock进行测试(来自dotGO2014)
源自于dotGO 2014的视频,讲述如何使用 interface 来mock 进行测试.. 可以FQ的同学自己观看,这里把重要的一些代码给截图搬到国内了 https://www.youtube.co ...
- AsyncTask异步加载和Gson
public class MainActivity extends Activity { private List<Goods> goods=new ArrayList<Goo ...
- Lvs之NAT、DR、TUN三种模式的应用配置案例
LVS 一.LVS简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的 ...
- BZOJ3175 Tjoi2013 攻击装置(二分图匹配)
传送门 Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照"日"字攻击其周围的 8个位置(x-1,y-2),(x-2,y ...
- wav文件格式分析(三)
(四)附表 1.头格式表: 2.PCM数据的存放方式 3.PCM波形样本的数据格式 WAVE文件的每个样本值包含在一个整数i中,i的长度为容纳指定样本长度所需的最小字节数. 首先存储低有效字节,表示样 ...