2014-10-07 12 views

risposta

8

Devi creare una classe personalizzata, derivata da MKMapView. Questa classe deve implementare il protocollo MKMapViewDelegate.

Quindi sono necessari 2 passaggi: creare l'oggetto annotazione e creare una vista per tale annotazione.

Crea nota:

Da qualche parte nel codice, dipende dalle vostre esigenze:

let annotation = MKPointAnnotation() 
annotation.setCoordinate(location) // your location here 
annotation.title = "My Title" 
annotation.subtitle = "My Subtitle" 

self.mapView.addAnnotation(annotation) 

Creare l'annotazione View

func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { 
    if annotation is MKPointAnnotation { 
     let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "myPin") 

     pinAnnotationView.pinColor = .Purple 
     pinAnnotationView.draggable = true 
     pinAnnotationView.canShowCallout = true 
     pinAnnotationView.animatesDrop = true 

     return pinAnnotationView 
    } 

    return nil 
} 
+0

Grazie mille !!! : D –

4

questo è il mio codice di esempio. Questo codice consente di premere a lungo sulla mappa per aggiungere un punto e trascinare quel punto finché non si rilascia il dito dallo schermo. Dai anche un'occhiata al gestureRecognizer che devi aggiungere sulla visualizzazione mappa. Spero che questo possa aiutarti.

class TravelLocationMapController: UIViewController, MKMapViewDelegate { 


@IBOutlet var mapView: MKMapView! 

var dragPin: MKPointAnnotation! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    mapView.delegate = self 
    let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: "addPin:") 
    gestureRecognizer.numberOfTouchesRequired = 1 

    mapView.addGestureRecognizer(gestureRecognizer) 
} 

func addPin(gestureRecognizer:UIGestureRecognizer){ 
    let touchPoint = gestureRecognizer.locationInView(mapView) 
    let newCoordinates = mapView.convertPoint(touchPoint, toCoordinateFromView: mapView) 
    if dragPin != nil { 
     dragPin.coordinate = newCoordinates 
    } 

    if gestureRecognizer.state == UIGestureRecognizerState.Began { 
     dragPin = MKPointAnnotation() 
     dragPin.coordinate = newCoordinates 
     mapView.addAnnotation(dragPin) 
    } else if gestureRecognizer.state == UIGestureRecognizerState.Ended {    
     dragPin = nil 
    } 
} 

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 
    if annotation is MKPointAnnotation { 
     let pinAnnotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "myPin") 

     pinAnnotationView.pinTintColor = UIColor.purpleColor() 
     pinAnnotationView.animatesDrop = true 

     return pinAnnotationView 
    } 
    return nil 
} 

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) { 
    let lat = view.annotation?.coordinate.latitude 
    let long = view.annotation?.coordinate.longitude 

    print("Clic pin lat \(lat) long \(long)") 

} 
+0

Super, grazie! Dovresti provare ad ottenere un '' MKPinAnnotationView'' con '' mapView.dequeueReusableAnnotationViewWithIdentifier ("myPin") '' in '' mapView (_: viewForAnnotation) '', comunque. – brki

Problemi correlati