无法在谷歌地图中与自定义信息窗口进行交互

时间:2015-08-20 22:06:39

标签: ios swift uiview google-maps-sdk-ios gmsmapview

我有一个谷歌地图,我已经为我的标记创建了一个自定义信息窗口。我在窗户上放了几个按钮,但在我的生活中我无法与它们互动。这是我的自定义视图:

class MarkerWindowView: UIView, UIGestureRecognizerDelegate {

//@IBOutlet weak var thumbNail: UIImageView!
@IBOutlet weak var userName: UILabel!
@IBOutlet weak var videoLocation: UILabel!
@IBOutlet weak var tags: UILabel!


override func awakeFromNib() {
println("awake From Nib")
    self.userInteractionEnabled = true
    print(self.userInteractionEnabled)
    /*let recognizer = UITapGestureRecognizer(target: self, action:Selector("handleTap:"))
    recognizer.delegate = self
    /*for test in layer.sublayers {
        println(test)
    }*/*/
}

@IBAction func playVideoPressed(sender: AnyObject) {
    println("play video")
}
@IBAction func markerWindowViewWasTapped(sender: UITapGestureRecognizer) {
    println("playvideo")
}
/*func handleTap(recognizer: UITapGestureRecognizer) {
    println("tapped")
}*/

}

以下是在视图控制器中返回视图的方法:

func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! {
    println("markeInfoWindow")
    var newView = NSBundle.mainBundle().loadNibNamed("MarkerWindowView", owner: self, options: nil).first! as! MarkerWindowView
    //println(newView.description)
    newView.userName.text = "Kazuma"
    newView.videoLocation.text = "Harvard"
    newView.tags.text = "Kazuma is crazy"
    //view.bringSubviewToFront(newView)
    //view.insertSubview(newView, atIndex: 0)
    //newView.userInteractionEnabled = true
    /*for subView in self.view.subviews {
        println(subView)
    }*/
    //view.bringSubviewToFront(newView)
    return newView
}

我尝试了很多东西试图与这个视图进行交互,包括在堆栈中移动视图,移动图层等。以前有没有人遇到过这个问题?知道我做错了什么。我评论过的东西主要是我试图破解它。

1 个答案:

答案 0 :(得分:1)

自定义信息窗口呈现为UIImage,因此您无法与其上的任何内容进行交互。我遇到了类似的问题,最终使整个窗口成为一个按钮"这导致嵌入segue推动地图上的视图,给我详细信息(想想Yelp应用程序样式)。

我的信息窗口包含在单独的.xib中。以下是我的GMSMapViewDelegate中的一些代码:

func mapView(mapView: GMSMapView!, didTapInfoWindowOfMarker marker: GMSMarker!)
{
    ShowDetailView(mapMarkerManager!.GetMapMarker(marker)!)
}

func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView!
{
    let markerInfoWindow = UINib(nibName: "MarkerInfoPopup", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! MarkerInfoPopup

    markerInfoWindow.setValues(mapMarkerManager!.GetMapMarker(marker)!)
    return markerInfoWindow
}

private func ShowDetailView(mapMarker: MapMarker)
{
    delegate!.SetMapMarker(self, mapMarker: mapMarker)

    self.view.bringSubviewToFront(mapDetailView)
    mapDetailView.hidden = false

    mapView.hidden = true
    BackToMapButton.hidden = false
}

(mapMarker或多或少是一个GMSMarker包装器。它做其他东西,但在这种情况下并不重要)

我知道这并不是你想要的,但遗憾的是,使用谷歌地图时没有多少选择'内置于markerInfoWindow / didTapInfoWindowOfMarker。

参考:https://developers.google.com/maps/documentation/ios-sdk/marker?hl=en#info_windows

"注意:每次在地图上显示信息窗口时,信息窗口都会呈现为图像。这意味着在其属性处于活动状态时对其属性的任何更改都不会立即可见。信息窗口的内容将在下次显示时刷新。"