显示定位蓝点 最后更新时间: 2021年01月22日
定位蓝点指的是进入地图后显示用户当前位置点的功能,效果如下:
第一步,配置头文件
在您的 ViewController.h 中添加以下两个头文件:
#import <MAMapKit/MAMapKit.h>
#import <AMapFoundationKit/AMapFoundationKit.h>
#import <MAMapKit/MAMapKit.h>
#import <AMapFoundationKit/AMapFoundationKit.h>
第二步,显示定位蓝点
创建地图对象
在 MapTypeViewController.m 文件中添加实例化 MAMapView 对象,示例如下:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
///地图需要v4.5.0及以上版本才必须要打开此选项(v4.5.0以下版本,需要手动配置info.plist)
[AMapServices sharedServices].enableHTTPS = YES;
///初始化地图
MAMapView *_mapView = [[MAMapView alloc] initWithFrame:self.view.bounds];
///把地图添加至view
[self.view addSubview:_mapView];
///如果您需要进入地图就显示定位小蓝点,则需要下面两行代码
_mapView.showsUserLocation = YES;
_mapView.userTrackingMode = MAUserTrackingModeFollow;
}
override func viewDidLoad() {
super.viewDidAppear(animated)
AMapServices.shared().enableHTTPS = true
mapView = MAMapView(frame: self.view.bounds)
mapView.delegate = self
mapView.showsUserLocation = true
mapView.userTrackingMode = .follow
self.view.addSubview(mapView)
}
注意:5.1.0后由于定位蓝点增加了平滑移动功能,如果在开启定位的情况下先添加annotation,需要在此回调方法中判断annotation是否为MAUserLocation,从而返回正确的View。注释如下:
/**
* @brief 根据anntation生成对应的View。
注意:5.1.0后由于定位蓝点增加了平滑移动功能,如果在开启定位的情况先添加annotation,需要在此回调方法中判断annotation是否为MAUserLocation,从而返回正确的View。
if ([annotation isKindOfClass:[MAUserLocation class]]) {
return nil;
}
* @param mapView 地图View
* @param annotation 指定的标注
* @return 生成的标注View
*/
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id <MAAnnotation>)annotation;
配置定位权限
在 Info.plist 文件中增加定位权限配置,如下图示:
值得注意的是,定位权限有三种,您可根据需求进行选择。
Privacy - Location Always Usage Description | 始终允许访问位置信息 |
---|---|
Privacy - Location Usage Description | 永不允许访问位置信息 |
Privacy - Location When In Use Usage Description | 使用应用期间允许访问位置信息 |
自定义定位小蓝点
以下功能自iOS 地图 SDK V5.0.0 版本起支持。
初始化 MAUserLocationRepresentation 对象:
MAUserLocationRepresentation *r = [[MAUserLocationRepresentation alloc] init];
let r = MAUserLocationRepresentation()
精度圈是否显示:
r.showsAccuracyRing = NO;///精度圈是否显示,默认YES
r.showsAccuracyRing = false
是否显示蓝点方向指向:
r.showsHeadingIndicator = NO;///是否显示方向指示(MAUserTrackingModeFollowWithHeading模式开启)。默认为YES
r.showsHeadingIndicator = false
调整精度圈填充颜色:
r.fillColor = [UIColor redColor];///精度圈 填充颜色, 默认 kAccuracyCircleDefaultColor
r.fillColor = UIColor.red
调整精度圈边线颜色:
r.strokeColor = [UIColor blueColor];///精度圈 边线颜色, 默认 kAccuracyCircleDefaultColor
r.strokeColor = UIColor.blue
调整精度圈边线宽度:
r.lineWidth = 2;///精度圈 边线宽度,默认0
r.lineWidth = 2
精度圈是否显示律动效果:
r.enablePulseAnnimation = NO;///内部蓝色圆点是否使用律动效果, 默认YES
r.enablePulseAnnimation = false
调整定位蓝点的背景颜色:
r.locationDotBgColor = [UIColor greenColor];///定位点背景色,不设置默认白色
r.locationDotBgColor = UIColor.green
调整定位蓝点的颜色:
r.locationDotFillColor = [UIColor grayColor];///定位点蓝色圆点颜色,不设置默认蓝色
r.locationDotFillColor = UIColor.gray
调整定位蓝点的图标:
r.image = [UIImage imageNamed:@"你的图片"]; ///定位图标, 与蓝色原点互斥
r.image = UIImage(named: "您的图片")
执行:
[self.mapView updateUserLocationRepresentation:r];
mapView.update(r)