तलाश है: मज़बूती से, लगातार एक MKMapView एनोटेशन का चुनाव कैसे करें

वोट
29

कॉल करने के बाद MKMapView की एनिमेटेड: setCenterCoordinate विधि (एनीमेशन) के बिना, मैं कॉल करना चाहते हैं selectAnnotation: एनिमेटेड: (एनीमेशन के साथ) ताकि एनोटेशन नव केंद्रित पुशपिन से बाहर दिखाई नहीं देता।

अभी के लिए, मैं बस के लिए घड़ी mapViewDidFinishLoadingMap: और फिर एनोटेशन का चयन करें। हालांकि, इस समस्याग्रस्त है। उदाहरण के लिए, इस विधि कहा जाता है नहीं है जब अतिरिक्त नक्शा डेटा लोड करने की आवश्यकता नहीं है। उन मामलों में, मेरी एनोटेशन चयनित नहीं है।:(

बहुत अच्छा। मैं तुरंत केंद्र बजाय समन्वय स्थापित करने के बाद यह कह सकते हैं। आह, लेकिन इस मामले में यह संभव है कि वहाँ है नक्शा डेटा लोड करने के लिए (लेकिन यह अभी तक लोड नहीं हुआ है)। मैं भी जल्द ही यह फोन करने का जोखिम होता है, एनीमेशन पर सबसे अच्छा धब्बेदार बनने के साथ।

इस प्रकार, यदि मैं सही ढंग से समझ, यह न जानते हुए भी की बात है मेरी समन्वय, दिखाई दे रहा है, तो के बाद से यह दूरी की लगभग एक screenful दूर और नया नक्शा डेटा लोड करने के लिए संभव है। बल्कि, यह जानने के नया नक्शा डेटा लोड करने के लिए की जरूरत है, और फिर उसके अनुसार अभिनय की बात है।

यह कैसे पूरा करने के लिए पर कोई विचार, या कैसे अन्यथा (मज़बूती से) फिर से केंद्रित समन्वय जहां कि एनोटेशन जीवन पर मानचित्र दृश्य के बाद एक एनोटेशन चयन कैसे करें?

सुराग की सराहना की - धन्यवाद!

10/08/2009 को 20:53
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


7 जवाब

वोट
36

मैं एक ही समस्या में पड़ गए, लेकिन पाया क्या एक विश्वसनीय और उचित समाधान की तरह लगता है:

  1. लागू प्रतिनिधि विधि MapView: didAddAnnotationViews :. जब मैं प्रतिनिधि विधि के भीतर सीधे एनोटेशन का चयन करने की कोशिश की, कॉल आउट पिन के साथ गिरा दिया! यही कारण है कि अजीब लग रहा था, तो मैं एक आधा दूसरे के कुछ देरी जोड़ें।

    -(void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views {
        [self performSelector:@selector(selectInitialAnnotation)
              withObject:nil afterDelay:0.5];
    }
    
  2. प्रारंभिक टिप्पणी के रूप में आप उम्मीद थी, लेकिन बुला selectAnnotation का चयन करें: एनिमेटेड;

    -(void)selectInitialAnnotation {
        [self.mapView selectAnnotation:self.initialAnnotation animated:YES];
    }
    

ऐसा लगता है कि selectAnnotation:animated:कुछ परिस्थितियों में नहीं बुलाया जाता है। के साथ तुलना करें MKMapView डॉक्स :

निर्दिष्ट एनोटेशन एक संबद्ध एनोटेशन दृश्य नहीं है परदे पर नहीं है, और इसलिए करते हैं, तो इस विधि का कोई प्रभाव नहीं है।

16/02/2010 को 01:06
का स्रोत उपयोगकर्ता

वोट
7

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

यह एक छोटा सा है वीडियो मैं 5 पिन के बीच बेतरतीब ढंग से चल रहा है की बात ले लिया।

सबसे पहले, गोटो केंद्र एनोटेशन के समन्वय। मान लीजिए कि एनोटेशन वस्तु का नाम है चलो thePin

- (void)someMethod {
    [map setCenterCoordinate:thePin.coordinate animated:YES];
}

तब में regionDidChangeविधि, यह व्याख्या का चयन करें।

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
    [map selectAnnotation:thePin animated:YES];
}
12/11/2010 को 06:23
का स्रोत उपयोगकर्ता

वोट
4

खैर बस FYI करें, इस डॉक्स क्या कहना है,

निर्दिष्ट एनोटेशन एक संबद्ध एनोटेशन दृश्य नहीं है परदे पर नहीं है, और इसलिए करते हैं, तो इस विधि का कोई प्रभाव नहीं है।

तो अगर मैं कॉल करना चाहते हैं setCenterCoordinate:animated:या setRegion:animated:और फिर मैं फोन करके एनोटेशन का चयन करना चाहते, selectAnnotation:animated:, एनोटेशन चयनित नहीं हो और कॉलआउट ठीक उसी कारण डॉक्स में ऊपर उल्लेख किया है के beacause दिखाई नहीं देगा, तो जिस तरह से यह हो सकता है महान की तरह कुछ है, setCenterCoordinate:animated:ComletionBlockलेकिन इसकी वहाँ नहीं ..! तरीका है कि मेरे लिए काम किया रूप में नीचे है,

 [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionBeginFromCurrentState|UIViewAnimationOptionCurveEaseInOut animations:^{
        [self.mapView setCenterCoordinate:location.coordinate animated:YES];
    } completion:^(BOOL finished) {
        [self.mapView selectAnnotation:location animated:YES];
    }];

यह आपको एक पूरा होने के ब्लॉक दे देंगे और यू का उपयोग करने वाले एनोटेशन चयन करने के लिए कर सकते हैं।

14/08/2013 को 06:43
का स्रोत उपयोगकर्ता

वोट
4

क्या के लिए मुझे बुला रहा था काम किया है selectAnnotation:animated:से mapView:didAddAnnotationViews:विधि:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views;
{
    [mapView selectAnnotation:[[mapView annotations] lastObject] animated:YES];
}

एक ही एप्पल प्रलेखन यहाँ

ध्यान दें कि मैं केवल नक्शे पर एक एनोटेशन तो था [[mapView annotations] lastObject]मेरी प्रयोजनों के लिए ठीक था। आपकी माइलेज भिन्न हो सकती है।

02/11/2009 को 19:44
का स्रोत उपयोगकर्ता

वोट
2

मैं एक ऐसी ही समस्या हो रही थी। मैं animatesDrop के साथ डिफ़ॉल्ट MKPinAnnotationView उपयोग कर रहा था: हाँ। बाद मैं MKMapView के लिए एनोटेशन कहा, मैं यह कर रहा था:

[mapView selectAnnotation:[mapView.annotations objectAtIndex:1] animated:YES]

जो मेरे कार्यक्रम के तर्क में, निकटतम एनोटेशन का चयन करना चाहिए। यह काम नहीं कर रहा था। मैं पता लगा कारण: एनोटेशन दृश्य पिन ड्रॉप एनीमेशन की वजह से यह चयन कॉल के समय में स्क्रीन पर नहीं था। इसलिए सभी मैंने किया था एक दूसरे बाद में एनोटेशन चयन करने के लिए एक टाइमर सेट किया गया। यह एक हैक है, लेकिन यह काम करता है। मुझे यकीन है कि अगर यह हर स्थिति में, हालांकि, उदाहरण के लिए एक 3 जी बनाम 3GS पर काम करेंगे नहीं हूँ। यह में यह डाल करने के लिए सही कॉलबैक फ़ंक्शन यह पता लगाने की बेहतर होगा।

selectTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self
               selector:@selector(selectClosestAnnotation) userInfo:nil
               repeats:NO];

- (void)selectClosestAnnotation {
    [mapView selectAnnotation:[mapView.annotations objectAtIndex:1]
             animated:YES];
}
15/12/2009 को 18:49
का स्रोत उपयोगकर्ता

वोट
1

मैं सब समाधान मैं मेरी समस्या (मैं एक एनोटेशन का चयन करने के जब मैं viewDidAppear से जोड़ना चाहते हैं) के लिए देखा के साथ कई समस्याओं मिल गया है:

  1. का उपयोग करते हुए mapView:didAddAnnotationViews:प्रतिनिधि विधि।

    यह मेरे लिए काम नहीं किया क्योंकि निर्दिष्ट एनोटेशन परदे पर नहीं है अगर है, और इसलिए एक संबद्ध एनोटेशन देखने की जरूरत नहीं है इस विधि कोई प्रभाव नहीं है।

  2. का उपयोग करते हुए mapViewDidFinishLoadingMap:प्रतिनिधि विधि।

    इसलिए विधि केवल एक बार कहा जाता है यह मेरे लिए काम नहीं किया, क्योंकि या तो नक्शा अब कैश किया गया है, पहली बार।

उपाय:

जॉन ब्लैकबर्न बहुत करीब है, लेकिन बिना किया गया था mapView:didAddAnnotationViews:विधि। मैं बस अपना खुद का फोन selectAnnotation:, विधि इससे पहले कि मैं देरी से टिप्पणी जोड़ने,:

[self.mapView addAnnotation:ann];
[self performSelector:@selector(selectAnnotation:) withObject:ann afterDelay:0.5];

और यही मैं अपने में क्या है selectAnnotation:विधि:

- (void)selectAnnotation:(id < MKAnnotation >)annotation
{
   [self.mapView selectAnnotation:annotation animated:YES];
}

दो iPhone 3GS (आईओएस 5 और 6) और एक iPhone 5 पर परीक्षण किया गया।

23/10/2012 को 09:31
का स्रोत उपयोगकर्ता

वोट
0

मैं इसी तरह की कठिनाई हो रही थी, लेकिन वास्तव में सब पर इस विधि काम करने के लिए, अकेले असंगत जाने में सक्षम नहीं था।

यहाँ मैं क्या काम करने के लिए मिल गया है। शायद यह भी आप के लिए काम करेंगे: कैसे पिन बिना छुए MKAnnotationView के कॉल आउट दृश्य को गति प्रदान करने?

24/08/2009 को 03:53
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more