【问题标题】:Why does MKMapView show user's location just as a pin?为什么 MKMapView 将用户的位置显示为图钉?
【发布时间】:2017-11-22 23:39:52
【问题描述】:

我有一个mapView,我想在其中显示用户的当前位置。但是,我不想将 mapView 居中到那个位置(它居中到其他位置)。因此,出于这个原因,我没有获取用户位置的坐标来设置区域。我只需调用showsUserLocation 并将其设置为true。一切正常,除了这使我的mapView 将用户的当前位置显示为针脚。我希望它采用默认蓝点的形式。

关于上面的问题,我有两个问题: 1) 为什么将用户的当前位置显示为图钉? 2) 如何让它以蓝点显示用户的当前位置?

如果您知道这些问题的答案(或只知道其中一个),我将不胜感激。

【问题讨论】:

    标签: ios swift mapkit


    【解决方案1】:

    一切都取决于您对地图视图委托mapView(_:viewFor:) 的实现。您可能正在返回一个 pin 注释。

    您可以通过检查其类(MKUserLocation)将地图视图提供的注释区分为用户的位置。如果您想要默认的蓝点,请为该类返回 nil

    【讨论】:

    • 所以,我应该自己画点,对吧?但在那种情况下,我一直在看教程(其中一些是关于MKMapView 的真正基本内容)试图弄清楚如何做到这一点。因此,在该教程中,该点出现而不调用 mapView(_:viewFor:) 方法。这就是为什么我对此感到好奇。
    • 您所看到的可能取决于您未向我们展示的其他代码。并且不同的系统使用不同的默认注释视图来显示用户位置,所以它也可能依赖于此。
    • 好吧,我实际上是在为我的自定义注释实现mapView(_:viewFor:) 方法。这可能是原因吗?如果需要,我可以显示调用该方法的代码。
    • 对,在这种情况下,您需要检查 MKUserLocation 并返回 nil
    【解决方案2】:

    在 Swift 5 中

    我们需要检查注解的类型,如果是用户位置不想返回pin:

    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        if annotation is MKUserLocation {
            return nil
        }
    
        [... code for the other annotations ... ]
    
    }
    

    现在您会看到您的位置是一个经典的蓝点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多