2014-10-07 4 views
6

मैं आईओएस में नोब हूं और मुझे में एक ड्रैगगेबल MKPointAnnotation को स्विफ्ट का उपयोग करके लागू करने की आवश्यकता है। मुझे एक उदाहरण चाहिए। अब मैं MKMapView को लागू करता हूं और मानचित्र में MKPointAnnotation जोड़ता हूं (addAnotation)।स्विफ्ट (आईओएस) का उपयोग कर ड्रैगगेबल एमकेपॉइंटएनोटेशन को कैसे कार्यान्वित करें?

मेरी अंग्रेजी खराब है, कृपया मेरी मदद करें!

मुझे यह link मिला, लेकिन मुझे समझ में नहीं आया।

उत्तर

8

आपको एमके मैप व्यू से व्युत्पन्न कस्टम क्लास बनाना है। इस वर्ग को MKMapViewDelegate प्रोटोकॉल को लागू करना है।

फिर आपको 2 चरणों की आवश्यकता है: एनोटेशन ऑब्जेक्ट बनाएं और उस एनोटेशन के लिए एक दृश्य बनाएं।

एनोटेशन बनाएं:

अपने कोड में कहीं न कहीं, अपनी आवश्यकताओं पर निर्भर करता है:

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

self.mapView.addAnnotation(annotation) 

एनोटेशन देखें

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

धन्यवाद एक बहुत !!! : डी –

4

यह मेरा उदाहरण कोड है बनाएँ। यह कोड आपको पॉइंट जोड़ने के लिए मानचित्र पर लंबे समय तक दबाए रखने और उस बिंदु को खींचने की अनुमति देता है जब तक आप स्क्रीन से अपनी उंगली छोड़ नहीं देते। इसके अलावा जेस्चर रिकॉग्नाइज़र को भी देखें, जिसे आपको मानचित्र दृश्य में जोड़ना है। उम्मीद है कि यह आपकी मदद कर सकता है।

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

सुपर, धन्यवाद! (: ViewForAnnotation _) '', हालांकि आप '' MapView में '' mapView.dequeueReusableAnnotationViewWithIdentifier ("myPin") '' के साथ एक मौजूदा '' MKPinAnnotationView'' प्राप्त करने के लिए प्रयास करना चाहिए। – brki

संबंधित मुद्दे

 संबंधित मुद्दे