iOS:Google Maps API - markerInfoWindow vs markerInfoContents

时间:2017-05-28 04:04:27

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

我浏览了Google Maps docs,说明似乎没什么帮助。

我关注使用markerInfoContents的旧版tutorial但是,当我使用该代表时,它并没有返回我的预期。

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

enter image description here

当我使用markerInfoWindow时,结果符合我的预期:

enter image description here

我只是从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时,它不会像教程中那样创建锚点或阴影效果。

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:1)

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

使用markerInfoWindow会显示您直接传递的视图,因此如果它没有锚点或阴影,则不会显示。

答案 1 :(得分:0)

如果你想使用默认的阴影效果和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
    }
}