【问题标题】:Remove MKAnnotationView Default Callout From View从视图中删除 MKAnnotationView 默认标注
【发布时间】:2017-10-01 15:35:25
【问题描述】:

我试图防止MKMapKit在点击MKMapView上显示的标记时显示默认注释标注没有 阻止注解的委托调用/交互(见下文)。

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

    // Custom callout initialized & presented here
    . . .

}

我了解您可以完全禁止标注显示

someAnnotationView.canShowCallout = NO;

或(更多是一种骇人听闻的方法)设置注释的任何显示参数:

// Commenting out string assignments below

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

正如其他线程中所建议的,将子视图添加到注释视图确实确实将自定义视图(无论您喜欢什么)添加到您选择的边界框架中。

问题,然而,是添加子视图

  1. 不会阻止默认标注气泡出现
  2. 如果您禁用canShowCallout 不设置标签,注释交互丢失..
  3. 如果您添加一个子视图,它会被添加到低于默认标注。

3 注意 您可以将添加子视图的时间延迟 +0.5 秒,然后将您的自定义视图添加到标注上方,但这是一个糟糕的解决方法,因为您会看到默认标注在您之前出现。 .

是否有任何解决方法

  1. 删除默认标注而不禁止调用委托方法,
  2. 或编辑实际标注视图(我猜是CGPathUIBezierePath 绘制视图)

任何帮助将不胜感激。谢谢!

更新:

我正在使用代理 mapView:viewForAnnotation 创建注释视图并将其添加到我的地图。

【问题讨论】:

  • 你在执行viewFor annotation:吗?我只是粗略地看了一下 MapKit,但是 “为指定注释显示的注释视图,如果你想显示标准注释视图,则为 nil。” 看起来这就是你想要的...... .developer.apple.com/reference/mapkit/mkmapviewdelegate/…
  • @DonMag 是的 - 采用 viewFor 方法来处理添加注释的提前(对我来说可能不是最有利的方式)。不知道如何从这里开始仍然允许触摸交互
  • 啊...更多调查(用于我的信息)...似乎viewFor annotation是地图上显示的视图 - 例如“Pin”图片。 “标注视图”是您点击“图钉”时显示的内容。这个 SO 问题可能会有所帮助...stackoverflow.com/questions/15241340/…
  • 对。看起来 setAnnotation 方法可以帮助覆盖绘图/设置标注。更具体地说,您引用的帖子(我已经看过的帖子)stackoverflow.com/a/29594428/4577249 这有助于我在设置完全自定义的标注时指出正确的方向

标签: ios objective-c mkmapview mapkit mapkitannotation


【解决方案1】:

选中后删除注释的标题和副标题:

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

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多