1

在地图上单击 MKAnnotationViews 时,它们会暂时被带到前面。我不希望这种行为,因为我有很多 MKAnnotationViews,它们只是地图上没有任何其他功能的图标。

我尝试将 MKAnnotationView 设置为userInteractionEnabledNO但它不起作用。MKAnnotationView 在触摸时仍会出现在最前面。这令人困惑,因为 MKAnnotationView 只是一个 UIView 所以我无法弄清楚为什么userInteractionEnabled被忽略。

4

4 回答 4

4

如上一个答案(和文档)中所述,要禁用对注释视图的触摸,您可以将其enabled属性设置为NO.


设置canShowCalloutNO是一个潜在的选择。但是,这不会阻止 didSelectAnnotationViewdidDeselectAnnotationView委托方法仍然被调用(即使不会显示标注)。这可能是一个问题,具体取决于您的情况。

于 2012-09-12T13:34:07.770 回答
2
 -(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
 (id <MKAnnotation>)annotation
{
MKPinAnnotationView *pinView = nil; 

//NSLog(@"my loc : %@",mapView.userLocation);

if(annotation != mapView.userLocation) 
{
    static NSString *defaultPinID = @"any";

    pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];

    if ( pinView == nil )
      {
        pinView = [[MKPinAnnotationView alloc]
                                      initWithAnnotation:annotation reuseIdentifier:defaultPinID] ;
      }
//this property may help you  

    pinView.canShowCallout = NO;
}
于 2012-09-12T12:28:53.037 回答
1

SWIFT 4 示例

我们可以达到我们的目标 -使用一个非常简单的委托方法禁用对 MKAnnotationView的触摸:

extension MyViewController: MKMapViewDelegate {

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
    for view in views {
        view.isEnabled = false
    }
}

}

如果此属性的值为 false,则注解视图会忽略触摸事件并且无法选择。结合扩展,总而言之,我们得到了一种优雅的方式来扩展我们的 ViewController 与 MKMapViewDelegate 协议一致性和不可选择的 MKAnnotationView!

于 2018-10-18T14:05:58.577 回答
0

在您创建它们的方法中将用户交互的 MKPinAnnotationView *pinView 或 MKAnnotationView *annotationView 属性设置为 NO,即

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
 (id <MKAnnotation>)annotation{

static NSString *annotation = @"identifier";

   MKAnnotationView * aView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];

    if ( aView == nil )
      {
        aView = [[MKAnnotationView alloc]
                                      initWithAnnotation:annotation reuseIdentifier:annotation] ;
      }
[aView setUserInteractionEnabled:NO];
}
于 2012-09-12T12:38:16.470 回答