从视图

时间:2017-05-03 17:10:53

标签: ios objective-c mkmapview mapkit mapkitannotation

我正在尝试 阻止 MKMapKit在点击MKMapView <上显示的标记时显示默认注释标注em> without 阻止注释的委托调用/交互(见下文)。

- (void)mapView:(MKMapView *)mapView didSelectAnnotation:(MKAnnotationView *)view {

    // Custom callout initialized & presented here
    . . .

}

我知道您可以禁用标注完全显示

someAnnotationView.canShowCallout = NO;

或(更多的是hackish方法)设置注释的任何显示参数:

// Commenting out string assignments below

// someAnnotation.title = @"Hey!";
// someAnnotation.subTitle = @"Aren't I an annoying callout :P ?";

正如其他主题中所建议的那样,在注释视图中添加子视图确实会将自定义视图(无论您喜欢的话)添加到您选择的边界框架中。

然而,

问题是添加子视图

  1. 是否会停止显示默认的标注气泡
  2. IF ,您停用canShowCallout 不设置标签,注释互动会丢失..
  3. 如果您添加了子视图,则会在 下添加默认标注。
  4. 3注意 您可以将子视图的添加延迟+0.5秒,然后将自定义视图添加到上面标注,但这是一个糟糕的解决方法,因为您看到默认标注在您的视图之前就会显示出来。

    是否有任何解决方法

    1. 删除默认标注,不用禁止调用委托方法,
    2. 或编辑实际的标注视图(我猜测它有一些CGPathUIBezierePath绘制的视图)
    3. 任何帮助将不胜感激。谢谢!

      更新

      我正在使用委托mapView:viewForAnnotation为我的地图创建和添加注释视图。

1 个答案:

答案 0 :(得分:0)

选择后,同时删除注释的标题和副标题:

    func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
        if let annotation = view.annotation {
            annotation.title = nil
            annotation.subtitle = nil
        }
    }