2016-06-10 14 views
0

Ich bin neu auf iOS-Entwicklung und Mapbox, so tut mir leid, wenn Frage klingt dumm, aber ich kann es nirgendwo finden Sie darauf zu finden. Ich habe eine Karte und Anmerkungen dazu. Ich möchte einige andere Informationen anzeigen, wenn der Benutzer die Anmerkung berührt und festhält (lange Geste drücken). Ich habe eine lange Presse-Geste, um zu arbeiten, aber habe den Weg gefunden, Anmerkungen zu finden, die berührt oder zumindest indexiert sind. Bisher habe ich es so:Mapbox finden Annotation auf der Karte nach langem Drücken Geste

class eventsMapController: UIViewController, MGLMapViewDelegate { 
override func viewDidLoad() { 
    super.viewDidLoad() 
    mapView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 

    // Set the map's bounds to Oslo 59.920269,10.71167 
    //let bounds = MGLCoordinateBounds(sw: CLLocationCoordinate2D(latitude: 59.925861, longitude: 10.712185), 
           //  ne: CLLocationCoordinate2D(latitude: 59.889798, longitude: 10.794754))   
    view.addSubview(mapView) 

    // Set the map view‘s delegate property 
    mapView.delegate = self 

    let myGesture = UILongPressGestureRecognizer(target: self, action: #selector(eventsMapController.testLongGesture)) 
    myGesture.minimumPressDuration = 0.8 
    mapView.addGestureRecognizer(myGesture) 
} 
func testLongGesture(long: UILongPressGestureRecognizer){ 
    if long.state == .Began{ 
     print("begin", long) 
    } 
} 
} 

Ich bin Hinzufügen von Anmerkungen wie diese

let pointAnotation = MGLPointAnnotation() 
     pointAnotation.coordinate = CLLocationCoordinate2DMake(event.lat, event.lng) 
     pointAnotation.title = name 
     pointAnotation.subtitle = headline 
self.mapView.addAnnotation(pointAnotation) 

Bitte helfen Sie mir jemand, ich viele Stunden verwendet versuchen, es herauszufinden.

Antwort

3

Ich denke, das erste, was ich versuchen würde, ist die Delegiertenmethode mapView(_:didSelectAnnotation:) implementieren. Ich bin mir nicht sicher, ob es aufgerufen wird, wenn ein langes Drücken passiert, aber wenn es so ist, würde es die Dinge relativ einfach machen, indem es dir sagt, welche Annotation zu verwenden ist.

Wenn nicht, werden Sie wahrscheinlich so etwas wie tun müssen:

  1. die Karte koordinieren Finden Sie heraus, dass der langen Presse Standort entspricht. Etwas wie:

    let longPressPoint : CGPoint = long.locationInView(mapView) 
    let longPressCoordinate = mapView.convertPoint(longPressPoint, toCoordinateFromView:mapView) 
    

    , dass Sie eine CLLocationCoordinate2D entsprechend der langen Presse Standort gibt.

  2. Führen Sie Ihre Anmerkungen durch und vergleichen Sie die Koordinate jedes einzelnen mit der Koordinate für langes Drücken, um eine zu finden, die sich in der Nähe des langen Druckes befindet. Beachten Sie, dass der lange Druck möglicherweise nicht auf einer Anmerkung steht, also wählen Sie nicht automatisch die nächste aus.