2011-04-22 15 views
11

मेरे पास MKMapView है और मानचित्र दृश्य में "उपयोगकर्ता स्थान दिखाएं" सेट है। सवाल अगर ऐप को मेरे स्थान का उपयोग करना चाहिए, तो मैं हाँ कहता हूं। फिर मुझे नीली गोली दिखाई देती है और मैं वर्तमान स्थान पर ज़ूम कर सकता हूं।MKMapView: स्टार्टअप उपयोगकर्ता स्थान पर -> ज़ूमिंग

मैंने इसके बारे में कई अन्य पोस्ट पढ़ी हैं, लेकिन समस्या को हल करने में कुछ भी नहीं है, कि उपयोगकर्ता का स्थान स्वचालित रूप से ज़ूम नहीं होगा।

यदि उपयोगकर्ता स्थान तक पहुंचने की अनुमति देता है तो मैं स्टार्टअप पर ज़ूम करना चाहता हूं, अन्यथा परिभाषित समन्वय ज़ूम इन करना चाहिए। (बाद में, उपयोग स्थान को अनुमति देता है, इसे अपडेट किया जा सकता है, लेकिन केंद्र को सेट नहीं करना चाहिए जब भी मुझे स्थान पर अपडेट मिलते हैं तो उपयोगकर्ता स्थान)।

इस व्यवहार को लागू करने के लिए क्या कदम हैं? मैंने उदाहरण के लिए यह प्रयास किया: How do I zoom an MKMapView to the users current location without CLLocationManager? केवीओ के साथ लेकिन यह काम नहीं करता है ...

मुझे उम्मीद है कि किसी के पास कोई विचार है?

शुभकामनाओं सहित, टिम

+0

iOS 5.0 के लिए और अधिक करना होगा: [MapView setUserTrackingMode: MKUserTrackingModeFollow एनिमेटेड: हाँ]; – Arjan

उत्तर

24

आप प्रतिनिधि विधि MapView प्रयास किया है: didUpdateUserLocation :?

ज फ़ाइल में:

मैं अपने कोड में कुछ इस तरह इस्तेमाल किया

@property (nonatomic, retain) CLLocation* initialLocation; 

और .m फ़ाइल में:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation 
{ 
    if (!initialLocation) 
    { 
     self.initialLocation = userLocation.location; 

     MKCoordinateRegion region; 
     region.center = mapView.userLocation.coordinate; 
     region.span = MKCoordinateSpanMake(0.1, 0.1); 

     region = [mapView regionThatFits:region]; 
     [mapView setRegion:region animated:YES]; 
    } 
} 
+0

मुझे मेरी त्रुटि है, यह 4.x पर काम करता है लेकिन 3.x पर नहीं। :-(लेकिन अगर उपयोगकर्ता स्थान उपलब्ध नहीं है (क्योंकि कोई जीपीएस या उपयोगकर्ता स्थान का उपयोग करने की अनुमति नहीं देता है) तो मैं निर्देशांक को एक निश्चित स्थान पर कैसे सेट कर सकता हूं? – Tim

+0

'मानचित्र दृश्य: didUpdateUserLocation:' आईओएस 4.0 और बाद में उपलब्ध है , इसलिए यदि आप 3.x –

+1

को लक्षित कर रहे हैं तो आप भाग्य से बाहर हैं। मैंने अपने ऐप में समान चीजें की हैं, लेकिन अलग-अलग क्रम में। मैं एक डिफ़ॉल्ट स्थान पर ज़ूम करता हूं। फिर, यदि उपयोगकर्ता अनुमति देता है और जीपीएस ठीक हो जाता है, उपयोगकर्ता स्थान पर ज़ूम करें। यदि नहीं, तो नक्शा डिफ़ॉल्ट स्थान पर रहता है और कुछ भी नहीं होता है। क्या यह आपकी स्थिति में समझ में आता है? –

2

आप इस तरह यह कर सकते हैं आपके viewDidLoad में यह कोड लिखें

self.mapDetail.showsUserLocation = YES; 
[self.mapDetail.userLocation addObserver:self 
          forKeyPath:@"location" 
           options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld) 
           context:nil]; 

और इस विधि कार्य

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    MKCoordinateRegion region; 
    region.center = self.mapDetail.userLocation.coordinate; 

    MKCoordinateSpan span; 
    span.latitudeDelta = 1; // Change these values to change the zoom 
    span.longitudeDelta = 1; 
    region.span = span; 

    [self.mapDetail setRegion:region animated:YES]; 
    [self.mapDetail.userLocation removeObserver:self forKeyPath:@"location"]; 
} 
संबंधित मुद्दे