2011-12-09 17 views
15

मैं वर्तमान स्थान आइकन के लिए कस्टम कॉल आउट (शीर्षक और उपशीर्षक) का उपयोग कर रहा हूं। मैंने डिफ़ॉल्ट एनोटेशन को अक्षम करने के लिए निम्न कोशिश की लेकिन यह काम नहीं करता है।सेटिंग वर्तमान स्थान एनोटेशन के लिए CanShowCallOut = NO, आईफोन

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation 
{ 
    NSLog(@"viewForAnnotation"); 
    if ([annotation isKindOfClass:[MKUserLocation class]]) 
    { 
     MKAnnotationView *userLocationView = [mapView viewForAnnotation:annotation]; 
     userLocationView.canShowCallout = NO; 
     NSLog(@"[annotation isKindOfClass:[MKUserLocation class]"); 
     return nil; 
    } 

} 

केवल जिस तरह से यह काम करता है

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)ann 
{ 
    if([ann.annotation isKindOfClass:[MKUserLocation class]]) 
    { 
     [mymap deselectAnnotation:ann.annotation animated:NO]; 
    } 
} 

है लेकिन यह कभी कभी समय लेता है। क्या वर्तमान स्थान एनोटेशन के लिए डिफ़ॉल्ट कॉलआउट दृश्य अक्षम करने का कोई अन्य तरीका है? किसी भी तरह की सहायता को आभार समझेंगे।

+0

आप वर्तमान स्थान के लिए डिफ़ॉल्ट एनोटेशन द्वारा नीले बिंदु मतलब है? – Ravin

+0

@ राविन, हां। वर्तमान स्थान एनोटेशन द्वारा मेरा मतलब नीली पल्सिंग डॉट है। – chatur

उत्तर

28

इस वर्तमान स्थान MKAnnotationView के संदर्भ प्राप्त करने के लिए एक की जरूरत पूरा करने के लिए लेने के लिए बालवाड़ी को चलाने के लिए है। कोई भी इस संदर्भ को कहीं भी प्राप्त कर सकता है लेकिन जैसे ही उपयोगकर्ता स्थान निर्धारित होता है, इसे प्राप्त करना बेहतर होता है।

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
MKAnnotationView* annotationView = [mapView viewForAnnotation:userLocation]; 
annotationView.canShowCallout = NO; 

} 

या उपयोग विधि

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { 
MKAnnotationView *aV; 
    for (aV in views) { 
      if ([aV.annotation isKindOfClass:[MKUserLocation class]]) { 
       MKAnnotationView* annotationView = aV; 
       annotationView.canShowCallout = NO; 

      } 
    } 

निम्नलिखित और अगर क्रम में canShowCallout संपत्ति में बदलना चाहते हैं तो एक है, तो निम्न

for (AnnotationClass* annotation in mapView.annotations) 
    { 
     if([annotation isKindOfClass:[MKUserLocation class]]) 
     { 
      MKAnnotationView* annotationView = [mapView viewForAnnotation:annotation]; 
      annotationView.canShowCallout = NO; 
     } 
    } 
+0

मैंने पाया कि मध्य समाधान सही नहीं है, क्योंकि आप विचारों पर पुन: प्रयास करते हैं, इसलिए वर्ग 'एमकेयूसरलोकेशन' के बजाय 'एमकेयूसर लोकेशन व्यू' होगा, जो एक निजी वर्ग प्रतीत होता है। मैं तुम्हें उलटा तुलना करने के लिए सलाह देते हैं: आप 'canShowCallout' बंद कर देते हैं जाएगा जब टिप्पणियों का वर्ग अपनी खुद की टिप्पणियों का वर्ग (' उदाहरण के लिए MKAnnotation') नहीं है। – gklka

+10

इसने आईओएस 7 में काम करना बंद कर दिया है; वैकल्पिक हल (जो भी पहले के संस्करणों का समर्थन करता है) 'userLocation.title = @" "स्थापित करने के लिए है,' 'विधि MapView में: didUpdateUserLocation' रिक्त स्ट्रिंग पर शीर्षक की स्थापना प्रदर्शित होने से कॉल आउट होने से बचाता है। इन तरीकों में से कोई भी –

+1

आईओएस 7 पर मेरे लिए अच्छी तरह से काम कॉल आउट विकलांग था, लेकिन नीले डॉट अभी भी चयन किया गया था - आप बता सकते हैं अगर यह एक और नक्शा एनोटेशन ओवरलैप करती है। –

0

संपादित

तुम गलत हो रही के लिए खेद है।

मैंने इस पर अपना सिर टक्कर लगी।

यह एकमात्र तरीका है जिसे मैं कर रहा हूं। इस विधि के साथ समस्या यह है कि आपको उपयोगकर्ता स्थान दृश्य को बदलना होगा। तो यह इतना उपयोगकर्ता के अनुकूल नहीं हो सकता है।

किसी भी तरह से:

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation{ 
if ([annotation isKindOfClass:[MKUserLocation class]]){ 

     MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation                   reuseIdentifier:nil]; 
     annotationView.image = [UIImage imageNamed:@"your-icon.png"]; 
     annotationView.enabled=NO; 
     return annotationView; 
    }; 
    ........} 

मेरे बच्चे :)

गुड लक

+0

मैंने कोशिश की। लेकिन अभी भी डिफ़ॉल्ट कॉल आउट दिखाता है। – chatur

+0

क्या आप दिखा सकते हैं कि आपने यह कोड कहां रखा था? – shannoga

+0

मेरा जवाब – shannoga

6

इस के लिए एक अद्यतन का उपयोग तेजी से का उपयोग कर सकते हैं (के आधार पर चतुर का जवाब):

func mapView(mapView: MKMapView!, didAddAnnotationViews views: [MKAnnotationView]!) { 

    for view in views { 
     if view.annotation.isKindOfClass(MKUserLocation) { 
      view.canShowCallout = false 
     } 
    } 

} 

नोट: इस का उपयोग करते हुए, मैं कुछ और सभी दृश्यों के माध्यम से यह काम

1

यह स्विफ्ट 3.0 पर मेरे लिए काम किया बनाने/iOS 10.

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) { 
    (views.filter { $0.isKind(of: MKUserLocation.self) }).first?.canShowCallout = false 
} 

बजाय पाश करने के लिए की जरूरत नहीं थी, मैं बस filter कमांड पर भरोसा करें, उसके बाद वैकल्पिक कॉल के बाद पहले केवल एक स्थान होना चाहिए, और फिर मान को गलत पर सेट करें।

1

स्विफ्ट:

यह मेरे लिए काम किया: बस इस प्रतिनिधि विधि जोड़ें।

func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) { 
    for var view in views { 
     view.canShowCallout = false 
    } 
} 
1
// Objective-C 

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation { 
     MKAnnotationView *userLocationView = [mapView viewForAnnotation:userLocation]; 
     userLocationView.canShowCallout = NO; 
} 

// Swift 3 

func mapView(_ mapView: MKMapView, didUpdate userLocation: MKUserLocation) { 
     let userAnnotationView = mapView.view(for: userLocation) 
     userAnnotationView?.canShowCallout = false 
} 

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

  • कोई संबंधित समस्या नहीं^_^