2011-04-07 12 views
34

जब आप पिन टैप करते हैं तो आईपैड में मानचित्र ऐप पर आपको प्रकटीकरण सूचक के बजाय "i" के साथ सामान्य एनोटेशन मिलता है। "I" पर एक और टैप इस तरह एक पॉपओवर व्यू कंट्रोलर बताता है।मैं मानचित्र दृश्य में एनोटेशन के रूप में UIPopoverView कैसे प्रदर्शित करूं? (आईपैड)

map popover example

वहाँ एक रास्ता आसानी से इस लक्ष्य को हासिल करने के लिए है?

उत्तर

58

पहले मानचित्र में एक टिप्पणी जोड़ें और viewForAnnotation विधि में, प्रकार का एक बटन को rightCalloutAccessoryView निर्धारित करते हैं, कहते हैं, UIButtonTypeDetailDisclosure (मुझे नहीं लगता कि नीले रंग की जानकारी बटन डिफ़ॉल्ट रूप से उपलब्ध है)।

बटन दबाकर calloutAccessoryControlTapped प्रतिनिधि विधि को कॉल किया जाएगा। इस विधि में, एनोटेशन को अचयनित करें और अपना पॉपओवर दिखाएं। उदाहरण के लिए:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control 
{ 
    [mapView deselectAnnotation:view.annotation animated:YES]; 

    YourContentViewController *ycvc = [[YourContentViewController alloc] init... 
    UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:ycvc]; 
    [ycvc release]; 

    //hold ref to popover in an ivar 
    self.annotationPopoverController = poc; 

    //size as needed 
    poc.popoverContentSize = CGSizeMake(320, 400); 

    //show the popover next to the annotation view (pin) 
    [poc presentPopoverFromRect:view.bounds inView:view 
     permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

    [poc release]; 
} 

YourContentViewController UIViewController का एक उपवर्ग है जो आप किसी अन्य दृश्य नियंत्रक की तरह कोड कर सकते हैं। मैप्स ऐप ऐसा लगता है कि इसमें सामग्री में UITableView है।

+0

ग्रेट उत्तर, वास्तव में विस्तृत। – Robert

+0

मैप्स ऐप में इस परिदृश्य में एक दिलचस्प एनीमेशन है, छोटे बुलबुले को खारिज कर दिया गया है और नया पॉपओवर प्रस्तुत किया गया है, छोटे बबल वास्तव में पॉपओवर व्यू को फिट करने के लिए फैलता है। कोई विचार यह कैसे पूरा करने के लिए? –

+0

@ क्रिस वॉगनर: पता नहीं कैसे मैप्स ऐप करता है लेकिन शुरुआत में छोटी ऊंचाई के साथ पॉपओवर प्रदर्शित करने का प्रयास करें और फिर टाइमर या प्रदर्शन चयनकर्ता का उपयोग करें: withObject: afterDelay, मैन्युअल रूप से एनिमेटिंग popoverContentSize और अद्यतन रीक्ट के साथ पॉपओवर को फिर से प्रस्तुत करना (मूल स्थानांतरित हो गया है और ऊंचाई में वृद्धि हुई)। एक और विकल्प पहले कस्टम कस्टम UIView को प्रदर्शित/एनिमेट करना हो सकता है जो कि मध्य से फैलता है और उसके बाद अंतिम आकार के पॉपओवर को प्रदर्शित करता है (और नीचे कस्टम UIView को हटाएं)। मानचित्र ऐप में, कॉलआउट भी बाएं/दाएं स्थानांतरित करता है और यह view.callout ऑफ़सेट को अपडेट करके किया जा सकता है। – Anna

2

ऐसा लगता है कि पॉपओवर के लिए एक बेहतर स्थिति तो आप इस रेक्ट से पेश करना होगा करने के लिए:

CGPoint lc_point = [mapView convertCoordinate:view.annotation.coordinate toPointToView:mapView]; 
CGRect lc_frame = CGRectMake(lc_point.x,lc_point.y-view.frame.size.height,0,0); 
2

आप गॉर्डन ह्यूजेस 'Animated Callout की तरह एक पुस्तकालय का उपयोग कर सकते हैं। दुर्भाग्य से यह अभी भी आईओएस 6 पर पूरी तरह से काम नहीं कर रहा है (कॉलआउट अजीब दिखाते हैं)।

यहाँ iOS 5 है:

enter image description here

0

मेरे आवश्यकता इस मुद्दे के समान था, लेकिन यह भी, जबकि कॉलआउट प्रदर्शित किया जाता है उन नक्शा (पैन और ज़ूम) के साथ बातचीत करने की अनुमति की जरूरत है। इसके लिए मैंने इस जिथब प्रोजेक्ट को बनाया है: https://github.com/crarau/mapkit-custom-callout

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