无法与 google 地图中的自定义信息窗口交互
Cant interact with custom infowindow in google map
我有一张 google 地图,并为我的标记创建了自定义信息 window。我在 window 上放了几个按钮,但我终生无法与它们互动。这是我的自定义视图:
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")
}*/
}
这里是 returns 视图控制器中的视图的方法:
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
}
我尝试了很多方法来尝试与此视图交互,包括在堆栈中移动视图、移动图层等。以前有人遇到过这个问题吗?知道我做错了什么。我注释掉的东西大部分是我试图破解它。
自定义信息 window 呈现为 UIImage,因此您无法与其上的任何内容进行交互。我有一个类似的问题,并最终使整个 window 成为一个 "button",导致嵌入 segue 在地图上推送视图,为我提供详细信息(想想 Yelp 应用程序样式)。
我的信息 window 包含在单独的 .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 包装器。它做其他事情但在这种情况下并不重要)
我知道这不是您想要的,但遗憾的是,使用 Google 内置 markerInfoWindow/didTapInfoWindowOfMarker 地图时没有太多选择。
参考:https://developers.google.com/maps/documentation/ios-sdk/marker?hl=en#info_windows
"Note: The info window is rendered as an image each time it is displayed on the map. This means that any changes to its properties while it is active will not be immediately visible. The contents of the info window will be refreshed the next time that it is displayed."
我有一张 google 地图,并为我的标记创建了自定义信息 window。我在 window 上放了几个按钮,但我终生无法与它们互动。这是我的自定义视图:
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")
}*/
}
这里是 returns 视图控制器中的视图的方法:
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
}
我尝试了很多方法来尝试与此视图交互,包括在堆栈中移动视图、移动图层等。以前有人遇到过这个问题吗?知道我做错了什么。我注释掉的东西大部分是我试图破解它。
自定义信息 window 呈现为 UIImage,因此您无法与其上的任何内容进行交互。我有一个类似的问题,并最终使整个 window 成为一个 "button",导致嵌入 segue 在地图上推送视图,为我提供详细信息(想想 Yelp 应用程序样式)。
我的信息 window 包含在单独的 .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 包装器。它做其他事情但在这种情况下并不重要)
我知道这不是您想要的,但遗憾的是,使用 Google 内置 markerInfoWindow/didTapInfoWindowOfMarker 地图时没有太多选择。
参考:https://developers.google.com/maps/documentation/ios-sdk/marker?hl=en#info_windows
"Note: The info window is rendered as an image each time it is displayed on the map. This means that any changes to its properties while it is active will not be immediately visible. The contents of the info window will be refreshed the next time that it is displayed."