无法在谷歌地图中与自定义信息窗口进行交互
我有一个谷歌地图,我已经为我的标记创建了一个自定义信息窗口。 我在窗户上放了几个按钮,但在我的生活中我无法与它们互动。 这是我的自定义视图:
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 }
我尝试过一些东西来尝试与这个视图进行交互,包括在堆栈中移动视图,移动图层等。以前有人遇到过这个问题吗? 知道我做错了什么。 我评论的内容主要是我试图破解它。
自定义信息窗口呈现为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 = zh_CN #info_windows
“注意:每次在地图上显示信息窗口时,信息窗口都会呈现为图像。这意味着当它处于活动状态时对其属性的任何更改都不会立即可见。信息窗口的内容将在下次刷新时刷新显示它。“