zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

iOS开发—百度地图配置流程,2.6.0 版本 支持64位详解手机开发

2023-06-13 09:20:15 时间
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位
6.添加到工程之后编译一下,检查一下错误

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

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++

#import  BMapKit.h

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

{

 BMKMapManager * _mapManager;

 

}

@property (strong, nonatomic) UIWindow *window;

 

 

@end

13.在.mm文件中如下

 

(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  BMKLocationComponent.h

@interface ViewController :UIViewController BMKLocationServiceDelegate

{

//定位服务类

 BMKLocationService *_locService;

}

 

@end

15.

#import  ViewController.h

 

@interface ViewController () 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 >

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

6084.html

app程序应用开发手机开发无线开发移动端开发