2010-02-03 12 views
26

मैं MKPinAnnotationView प्रोग्रामेटिक रूप से कॉलआउट खोलना चाहता हूं। जैसे मैं मानचित्र पर 10 पिन छोड़ देता हूं, और मेरे लिए सबसे नज़दीक खोलना चाहता हूं। मैं ऐसा कैसे कर पाऊंगा?प्रोग्राम आउटपुट एमकेएएनोटेशन व्यू को कैसे खोलें? (आईफोन, मैपकिट)

ऐप्पल ने MKAnnotationView's के लिए 'चयनित' पैरामीटर निर्दिष्ट किया है, लेकिन इसे सीधे सेट करने से हतोत्साहित करता है (यह काम नहीं करता है, इसे आजमाया गया है)।

बाकी MKAnnotationView के लिए केवल एक setHighlighted (वही कहानी) है, और कर सकते हैं ShowCallout विधि ..

किसी भी अगर यह बिल्कुल संभव है संकेत?

उत्तर

76

अपने mapViewController में एक कार्रवाई विधि बनाने के लिए:

- (void)openAnnotation:(id)annotation 
{ 
    //mv is the mapView 
    [mv selectAnnotation:annotation animated:YES]; 

} 

फिर आप वर्तमान स्थान और एनोटेशन सरणी में उपलब्ध चलने के आधार पर निकटतम एनोटेशन निर्धारित कर सकते हैं।

[mv annotations]; 

एक बार निकटतम एनोटेशन गणना की जाती है, फोन:

[self openAnnotation:closestAnnotation]; 

MapView स्वचालित रूप से स्क्रॉल करना चाहिए प्रदर्शन क्षेत्र के केंद्र में अपनी व्याख्या जगह।

+0

टाइपो को ठीक करने के लिए धन्यवाद नाट। –

+0

भयानक दोस्त है .. –

+1

यदि आप एनोटेशन को जानते हैं जिसे आप प्रोग्रामेटिक रूप से चुनना चाहते हैं तो मानचित्र दृश्य के दृश्य क्षेत्र में होगा, आप '[mv annotationsInMapRect: mv.visibleMapRect]' का उपयोग कर सकते हैं। यदि आप नक्शा एनोटेशन के बड़े सेट के साथ काम कर रहे हैं तो यह प्रदर्शन में एक कदम प्रदान करेगा। –

1

तेज 3 में यह करने के लिए अद्यतन किया जाता है:

func openAnnotation(annotation: MkAnnotation) { 
_ = [mapView .selectAnnotation(annotation, animated: true)] 
} 

और किसी भी टिप्पणी का उपयोग कर कहा जा सकता है (यह व्याख्या कॉलआउट दृश्य खोलने के लिए और नक्शे पर एनोटेशन केंद्रित करने के लिए प्रयास करेंगे)

उदाहरण के लिए एनोटेशन की एक अनुमानित सूची में दूसरी एनोटेशन का उपयोग करना।

openAnnotation(annotation: mapView.annotations[1]) 
+0

आपका कोड ओबीजेसी (वर्ग ब्रैकेट) और स्विफ्ट का एक अजीब मिश्रण है। एक सरणी क्यों बनाते हैं तो इसे छोड़ दें? –

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