2014-02-26 34 views
3

我在我的iOS应用程序中有一个普通的地图,其中Shows Users Location已启用 - 意味着我在地图上有正常的蓝点,显示我的位置和准确度信息。代码中的标注禁用。蓝色位置点是可选的,错误地拦截我的MKAnnotationViews触摸

但我也有自定义的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 { 
     ... 
    } 
} 

回答

7

禁止标注的观点并不禁止触摸(didSelectAnnotationView仍然会被调用)。

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

然而,不是在viewForAnnotation委托方法设置enabledNO,我建议在didAddAnnotationViews委托方法做它,而不是在viewForAnnotation,只返回nilMKUserLocation

实施例:

- (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 
} 
+1

我建议在'didAddAnnotationViews'仅用于用户位置注解enabled'设置''到NO'。如果您想禁用自己注释中的交互,则可以在创建视图时在'viewForAnnotation'中执行此操作。 – Anna

+0

使用启用而不是userInteractionEnabled的优秀建议。解决了我的堆叠注释问题! – Lytic