如何在地图视图中禁止"当前位置"标注

cha*_*tta 14 mkmapview ios mkmapviewdelegate

点击表示userLocation的脉动蓝色圆圈会显示"当前位置"标注.有没有办法压制那个?

jow*_*wie 18

一旦用户位置更新,您可以更改注释视图中的属性:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    MKAnnotationView *userLocationView = [mapView viewForAnnotation:userLocation];   
    userLocationView.canShowCallout = NO;
}    
Run Code Online (Sandbox Code Playgroud)


小智 17

您可以将其设置title为空以禁止标注:

mapView.userLocation.title = @"";
Run Code Online (Sandbox Code Playgroud)


编辑:
更可靠的方法可能是在didUpdateUserLocation委托方法中清空标题:

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    userLocation.title = @"";
}
Run Code Online (Sandbox Code Playgroud)

或者在viewForAnnotation:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>) annotation
{
    if ([annotation isKindOfClass:[MKUserLocation class]])
    {
        ((MKUserLocation *)annotation).title = @"";
        return nil;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

在委托方法中设置标题可以确保您有一个真正的userLocation实例可以使用.


Vla*_*iak 5

斯威夫特 4

// MARK: - MKMapViewDelegate

func mapViewDidFinishLoadingMap(_ mapView: MKMapView) {
    if let userLocationView = mapView.view(for: mapView.userLocation) {
        userLocationView.canShowCallout = false
    }
}
Run Code Online (Sandbox Code Playgroud)