2014-10-07 13 views

cevap

8

MKMapView'dan türetilmiş bir özel sınıf oluşturmanız gerekir. Bu sınıf, MKMapViewDelegate protokolünü uygulamak zorundadır.

Sonra 2 adıma ihtiyacınız vardır: Ek açıklama nesnesini oluşturun ve bu açıklama için bir görünüm oluşturun.

Not Oluştur: Somewhere kodunuzu

, ihtiyaçlarınıza bağlıdır:

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

self.mapView.addAnnotation(annotation) 

açıklama Görünüm

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

Çok teşekkürler! : D –

4

bu benim kod örneği oluşturun. Bu kod, bir Nokta eklemek ve parmağınızı ekrandan serbest bırakana kadar bu noktayı sürüklemek için haritaya uzun basmanızı sağlar. Ayrıca harita görünümünde eklemeniz gereken jestRecognizer'a da bakın. Umarım bu size yardımcı olabilir.

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

Süper, teşekkürler! Yine de, mapView.dequeueReusableAnnotationViewWithIdentifier ("myPin") ile '' mapView (_: viewForAnnotation) '' arasında bir '' '' MKPinAnnotationView' '' i bulunmaya çalışmalısınız. – brki