7

我的 iOS 应用程序中有一个法线地图,其中启用了“显示用户位置” - 这意味着我在地图上有我的普通蓝点,显示我的位置和准确性信息。标注在代码中被禁用。

但我也有自定义的 MKAnnotationViews,它们都绘制在地图周围,它们都有自定义标注。

这工作正常,但问题是当我的位置位于 MKAnnotationView 的位置时,蓝点 (MKUserLocation) 会拦截触摸,因此 MKAnnotationView 不会被触摸。

如何禁用蓝点上的用户交互,以便 MKAnnotationViews 而不是蓝点拦截触摸?

这是我到目前为止所做的:

- (MKAnnotationView *)mapView:(MKMapView *)map viewForAnnotation:(id <MKAnnotation>)annotation;
{
    if (annotation == self.mapView.userLocation)
    {
        [self.mapView viewForAnnotation:annotation].canShowCallout = NO;
        return [self.mapView viewForAnnotation:annotation];
    } else {
        ...
    }
}
4

2 回答 2

17

禁用标注不会禁用对视图的触摸(didSelectAnnotationView仍会被调用)。

要禁用注释视图上的用户交互,请将其enabled属性设置为NO

但是,我建议不要在委托方法中设置enabled为,而是在委托方法中进行设置,而在 in 中,只需 return for 。 NOviewForAnnotationdidAddAnnotationViewsviewForAnnotationnilMKUserLocation

例子:

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

    //create annotation view for your annotation here...
}

-(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    MKAnnotationView *av = [mapView viewForAnnotation:mapView.userLocation];
    av.enabled = NO;  //disable touch on user location
}
于 2014-02-26T13:29:23.813 回答
0

斯威夫特 4.2 示例:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation)   ->     MKAnnotationView? {
    if annotation is MKUserLocation {
        return nil
    }
// Add custom annotation views here.
}

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView])      {
    // Grab the user location annotation from your IB Outlet map view.
    let userLocation = mapView.view(for: mapView.userLocation)
    userLocation?.isEnabled = false
}
于 2018-09-19T08:21:20.930 回答