2012-07-11 21 views
12

नहीं ले जा रहा है क्या हमारे पास आईओएस में उपयोगकर्ताओं के वर्तमान स्थान के लिए कस्टम एनोटेशन दृश्य हो सकता है?उपयोगकर्ता स्थान के लिए कस्टम एनोटेशन व्यू मैपव्यू

मुझे अपने स्वयं के कस्टम व्यू के साथ नीली बिंदु (मंडलियों के साथ) को हटाने की आवश्यकता है (कुछ पिंग पिन कहें)। क्या इसे करना संभव है?

यदि हम करते हैं, तो क्या यह पिन उपयोगकर्ता के स्थान में परिवर्तन होने पर नए स्थान पर जाता है? या क्या हमें इसे प्रोग्रामेटिक रूप से संभालने की ज़रूरत है?

मैंने देखा कि यदि हम उपयोगकर्ता के वर्तमान स्थान के लिए डिफ़ॉल्ट नीली बिंदु का उपयोग करते हैं, तो उपयोगकर्ता स्थान में परिवर्तन होने पर इसे मानचित्र में अपडेट किया जाता है।

मैं सिर्फ यह जानना चाहता हूं कि यह हमारे अपने कस्टम व्यू के साथ किया जा सकता है या नहीं।

उत्तर

14

हां, आप उपयोगकर्ता के स्थान के लिए एक कस्टम दृश्य देख सकते हैं।

दुर्भाग्यवश, इसे लागू करना कठिन है क्योंकि documentation for the viewForAnnotation delegate method का दावा है कि अगर आप एनोटेशन क्लास MKUserLocation है, तो कस्टम व्यू उपयोगकर्ता के स्थान के साथ आगे बढ़ना जारी नहीं रखता है। वास्तव में, जब MKUserLocation के लिए एक कस्टम दृश्य लौटाया जाता है, तो नक्शा दृश्य पूरी तरह से उपयोगकर्ता स्थान को अपडेट करना बंद कर देता है (मानचित्र दृश्य didUpdateUserLocation प्रतिनिधि विधि अब आग नहीं है)। मुझे विश्वास है कि यह एक बग है।

का संभावित हल CLLocationManager और एक कस्टम एनोटेशन ... उपयोग करने के लिए


यकीन showsUserLocationNO है या मानचित्र दृश्य पर अनियंत्रित बनाने है।

एक CLLocationManager के लिए गुण और एक कस्टम एनोटेशन MKAnnotation प्रोटोकॉल लागू करता है (या आप सिर्फ सामान्य MKPointAnnotation वर्ग इस्तेमाल कर सकते हैं) एक कस्टम वर्ग का उपयोग कर घोषित।

viewDidLoad या कुछ अन्य उचित जगह में, CLLocationManager बनाएं, delegate सेट करें और startUpdatingLocation पर कॉल करें।

location manager's didUpdateToLocation delegate method (नहीं मानचित्र दृश्य के didUpdateUserLocation प्रतिनिधि विधि), अपने कस्टम एनोटेशन बनाने या अद्यतन में:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    if (myUserLocAnnot == nil) 
    { 
     self.myUserLocAnnot = [[[MyUserLocClass alloc] init] autorelease]; 
      //remove the autorelease if using ARC 
     myUserLocAnnot.title = @"You are here"; 
     myUserLocAnnot.coordinate = newLocation.coordinate; 
     [mapView addAnnotation:myUserLocAnnot]; 
    } 
    else 
    { 
     myUserLocAnnot.coordinate = newLocation.coordinate; 
    } 
} 

अंत में, मानचित्र दृश्य के viewForAnnotation प्रतिनिधि विधि में, आप एक कस्टम एनोटेशन दृश्य वापसी होगी यदि एनोटेशन आपका कस्टम उपयोगकर्ता स्थान एनोटेशन है।

+0

एक ही समस्या का सामना करना पड़ा, शायद हम सेब – darshansonde

+0

धन्यवाद बंगा को बढ़ा सकते हैं धन्यवाद, यह अब काम कर रहा है। यहां तक ​​कि मुझे संदेह है कि मैपव्यू में एक बग है जो उपयोगकर्ता सेट के लिए हमारे कस्टम एनोटेशन व्यू को प्रदर्शित नहीं करता है जब हम इसे सेट करते हैं। – nkd

+0

लेकिन एक और मुद्दा जो मैं सामना कर रहा हूं, जैसे ही स्थान अपडेट शुरू होता है, मुझे वापस स्थान पर कॉल मिल जाता है प्रबंधक: didUpdateToLocation: स्थान विधि से जहां मैं एनोटेशन बनाता हूं और इसे मानचित्र में जोड़ता हूं, लेकिन नक्शा मेरा कस्टम दृश्य भी नहीं दिखा रहा है हालांकि मैं कस्टम दृश्य लौट रहा हूं। अगर मैं स्थान और स्थान पर स्विच करता हूं, तो यह काम करता है। क्या यहां कोई समस्या है? – nkd