快速完成导入、创建、显示地图并实现定位
导入高德地图API
正好在前段时间学习了CocoaPods,我们直接在Podfile文件中pod我们需要的API:
考虑到使用IDFA上线的时候要做出说明并且处理一下,提高了被拒风险,我们选择使用不集成 IDFA 版本的 SDK:
platform :ios, '8.0'
inhibit_all_warnings!
target 'PrivateTutor' do
pod 'AMap3DMap-NO-IDFA'
pod 'AMapLocation-NO-IDFA'
pod 'AMapSearch-NO-IDFA' #高德地图SDK 无广告版本
end
注意点:导航和2D不能同时导入,因为导航SDK包含了3DMap,3DMap和2DMap不能同时导入的,否则会出错。官方说明如图:
cd进项目文件夹安装 pod install
成功后进入下一步。
- 需要更新时,使用命令
pod repo update
创建地图视图
在.h文件中:
#import <UIKit/UIKit.h>
#import <MAMapKit/MAMapKit.h>
#import <AMapLocationKit/AMapLocationKit.h>
#import <AMapFoundationKit/AMapFoundationKit.h>
.m文件中声明并懒加载创建视图:
@property (nonatomic, strong) MAMapView *mapView;
-(MAMapView *)mapView{
if(!_mapView){
// 设置范围
CGRect frame = self.view.frame;
frame.origin.y = 45;
frame.size.height = (self.view.frame.size.height - 45) * 0.55 + 45;
_mapView = [[MAMapView alloc] initWithFrame:frame];
_mapView.delegate = self;
// 是否显示用户位置
_mapView.showsUserLocation = YES;
// 设置导航模式为跟随
_mapView.userTrackingMode = MAUserTrackingModeFollow;
// 设置缩放级别
_mapView.zoomLevel = 18;
}
return _mapView;
}
将其加到父视图上,此时运行即可成功看到mapView。而定位仍不是当前所在的定位。
实现定位
首先我们要获取key,相关说明及步骤官方文档均有介绍:获取key
获取到key后,在appDelegate.m中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
/* 配置高德地图 key */
[AMapServices sharedServices].apiKey = @"获取到的key";
}
- 我们还需在info.plist中添加定位权限:
- 还需进行工程配置:
左侧目录中选中工程名,开启 TARGETS->Capabilities->Background Modes。在 Background Modes中勾选 Location updates
开启定位方法:
- (void)startLocation
{
if([CLLocationManager locationServicesEnabled]){
AMapLocationManager *locationManager = [[AMapLocationManager alloc]init];
_locationManager.delegate = self;
// 设定定位的最小更新距离。单位米,默认为 kCLDistanceFilterNone,表示只要检测到设备位置发生变化就会更新位置信息
_locationManager.distanceFilter = 5;
// 设定期望的定位精度。单位米,默认为 kCLLocationAccuracyBest
_locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
//是否允许后台定位。默认为NO。只在iOS 9.0及之后起作用。
[locationManager setAllowsBackgroundLocationUpdates:NO];
// 开始定位服务
[locationManager startUpdatingLocation];
}
}
此时运行就可以看到地图上定位点就是你当前的位置啦。