Не могу взаимодействовать с пользовательским информационным окном на карте Google

У меня есть карта Google, и я создал собственное информационное окно для своих маркеров. Я поставил пару кнопок на окно, но я не могу взаимодействовать с ними на всю жизнь. Вот мой пользовательский вид:

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
}

Я пробовал кучу вещей, чтобы попытаться взаимодействовать с этим представлением, включая смещение представлений в стеке, перемещение слоев и т. д. У кого-нибудь была эта проблема раньше? Любая идея, что я делаю неправильно. Материал, который я прокомментировал, в основном я пытаюсь его взломать.


person Conor Quinn    schedule 20.08.2015    source источник


Ответы (1)


Пользовательское информационное окно отображается как UIImage, поэтому вы не можете ни с чем в нем взаимодействовать. У меня была аналогичная проблема, и в итоге я сделал все окно одной «кнопкой», которая заставляла встраивать переход, чтобы нажимать на карту, давая мне подробности (подумайте о стиле приложения 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. Он выполняет другие функции, но не важен в данном контексте)

Я знаю, что это не совсем то, что вы хотели, но, к сожалению, при использовании Google Maps, встроенного в markerInfoWindow/didTapInfoWindowOfMarker, не так много вариантов.

Ссылка: https://developers.google.com/maps/documentation/ios-sdk/marker?hl=en#info_windows

"Примечание: информационное окно отображается как изображение каждый раз, когда оно отображается на карте. Это означает, что любые изменения его свойств, пока оно активно, не будут сразу видны. Содержимое информационного окна будет обновлено в следующий раз. чтобы он отображался».

person Leperkawn    schedule 21.09.2015