iOS初级开发学习笔记:高德地图显示地图并定位

2,257 阅读2分钟

快速完成导入、创建、显示地图并实现定位

导入高德地图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];
        
        }
}

此时运行就可以看到地图上定位点就是你当前的位置啦。