【问题标题】:iOS: Google Maps API - markerInfoWindow vs markerInfoContentsiOS:谷歌地图 API - markerInfoWindow 与 markerInfoContents
【发布时间】:2017-05-28 04:04:26
【问题描述】:

我查看了Google Maps docs,描述似乎没有多大帮助。

我正在关注使用 markerInfoContents 的旧 tutorial,但是,当我使用委托时,它没有返回我的预期。

使用markerInfoContents:我的自定义视图似乎覆盖了默认视图

当我使用markerInfoWindow时,结果是我所期望的:

我只是从 xib 文件中提取自定义 UIView,如下所示:

func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
    let placeMarker = marker as! PlaceMarker
    print(placeMarker.name)

    if let infoView = UIView.viewFromNibName(name: "MarkerInfoView") as? MarkerInfoView {
        infoView.nameLabel.text = placeMarker.name

        return infoView
    } else {
        return nil
    }
}

(将markerInfoWindow替换为markerInfoContents以获得第一张图像结果)

使用markerInfoContents,它创建了框的锚点和阴影效果。使用markerInfoWindow 时,它不会像教程中那样创建锚或阴影效果。

任何帮助都会很棒!

【问题讨论】:

  • 嗨,西蒙,如果它解决了您的问题,请标记答案,谢谢。

标签: ios swift google-maps swift3 google-maps-sdk-ios


【解决方案1】:

正如发布的文档链接中所述,使用markerInfoContents 时:“如果此方法返回一个视图,它将被放置在默认信息窗口框架内。”,因此您的视图被限制在默认窗口内(这就是为什么它显示了锚点和阴影)。看起来默认的信息窗口比你的 xib 中的 UIView 小,所以它会截断它。

markerInfoWindow的使用直接显示了你通过的view,所以如果没有anchor或者shadow就不会出现。

【讨论】:

    【解决方案2】:

    如果你想使用默认的阴影效果和markerInfoContents的锚点,那么你必须这样做:

    func mapView(_ mapView: GMSMapView, markerInfoContents marker: GMSMarker) -> UIView?
    {
        let placeMarker = marker as! PlaceMarker
        let view = UIView(frame: CGRect.init(x: 0, y: 0, width: 150, height: 150))
        if let infoView = UIView.viewFromNibName(name: "MarkerInfoView") as? MarkerInfoView 
        {
            infoView.nameLabel.text = placeMarker.name
            view.addSubview(infoView!)
            return view
        } else {
            return nil
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2013-10-17
      • 2011-03-25
      • 2023-03-24
      • 2012-07-30
      • 2014-11-21
      相关资源
      最近更新 更多