2010-07-22 15 views
8

पर MKOverlay को स्थानांतरित/अद्यतन करने के लिए MKOverlay अद्यतन करने का कोई तरीका है जो पहले से ही MKMapView में जोड़ा गया है। एक पुराने को हटाने और एक नया जोड़ना भयानक (धीमा) है।MKMapView

मैं यानी पृष्ठभूमि समारोह है कि इस कार्यप्रणाली को कॉल किया जाता है जब स्क्रीन पर एक उपरिशायी चाल को गति प्रदान करना चाहते हैं:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 

(MKAnnotions के साथ अपने एक छोटे से बेहतर मुझे लगता है कि, लेकिन मैं नहीं कर सकते MKPolyline, MKPolygon का उपयोग , आदि और पूरे जानकारी) एक बिंदु करने के लिए कम हो जाता है

+0

अतिरिक्त: आपको एक इंप्रेशन देने के लिए जहां मुझे इस फ़ंक्शन की आवश्यकता है: मैं मैप व्यू का उपयोग करता हूं और उपग्रहों की स्थिति दिखाने के लिए इसके ऊपर एनोटेशन डालता हूं। प्रत्येक उपग्रह को एक पदचिह्न भी दिखाना चाहिए (वह क्षेत्र जहां आप क्षितिज के ऊपर उपग्रह "देख सकते हैं)। यह जानकारी (पदचिह्न की स्थिति और आकार) को समय-समय पर अपडेट किया जाना है। क्षण में मेरे पास एक दृश्य के साथ एक समाधान है जिसमें सभी फुटप्रिंट हैं जहां मैं कोरग्राफिक्स के साथ सही आकार के साथ आकर्षित करता हूं। लेकिन मैं एमकेओवरले के साथ एक समाधान पसंद करूंगा, लेकिन मैं उन्हें गतिशील नहीं कर सकता ... कोई विचार? – user398877

उत्तर

4

MKOverlayView निम्न विधियों में जो करने के लिए MapKit मजबूर है फिर से प्रस्तुत करना दी mapRect:

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale

आप एक टाइमर (या समय-समय पर HTTP अनुरोध या निर्धारित करने कि आपके ओवरले अद्यतन किया जाना चाहिए के लिए अन्य विधि के कुछ प्रकार) का उपयोग कर रहे हैं, overlayView पर ऊपर तरीकों में से एक बुला कारण होगा यह मानचित्र पर उस स्थान को फिर से प्रस्तुत करने के लिए (यानी -canDrawMapRect:zoomScale: को फिर से कॉल किया जाएगा, और फिर -drawMapRect:zoomScale:inContext: कहा जाएगा यदि पूर्व रिटर्न हाँ है)।


अद्यतन:

क्या आप वाकई क्या आप फिर से प्रस्तुत करने के लिए की जरूरत है mapRect नहीं कर रहे हैं, तो आप mapRect रूप MKMapRectWorld निरंतर उपयोग करने में सक्षम हो सकता है - जो मेरा मानना ​​है कि ओवरले का कारण होगा पूरे मानचित्र में पुनः लोड करने के लिए (एक बार दृश्यमान)।

+1

यह मुझे लगता है ... आईओएस 7 के रूप में, ये विधियां 'एमकेओवरले रेन्डरर' पर हैं, न कि 'एमकेओवरले व्यू'। – livingtech

+0

यदि आप पूरे मानचित्र को अपडेट करना चाहते हैं, तो आप केवल 'setNeedsDisplay ' – gcamp

0

मुझे वास्तव में पथ को अमान्य करने के लिए ओवरले दृश्य को मजबूर करना पड़ा, ताकि नया सेट स्थापित करने से पहले पुराने पथ को साफ़ किया जा सके। [polygonView अमान्य पैथ]। मानचित्र दृश्य को बताते हुए कि इसे एक प्रदर्शन रीफ्रेश की आवश्यकता है मेरे लिए अपर्याप्त था।

1

MKAnnotations का उपयोग करें। आप उनके समन्वय को बदल सकते हैं। बस किसी भी स्पर्श से संबंधित सामान को अक्षम करें। एनोटेशन को आकर्षित करने के लिए आपको अपने ड्राइंग कोड की आवश्यकता होगी, ओपनजीएल शायद चाल करेगा। कोई अंतर नहीं जानता।

+3

पर कॉल कर सकते हैं यदि आप ज़ूम करते हैं तो एनोटेशन व्यू समान आकार में रहते हैं, ओवरले आकार ज़ूम स्केल के सापेक्ष हैं?मुझे मानचित्र पर एक सर्कल निर्दिष्ट करने की आवश्यकता है जिसे एक विशिष्ट क्षेत्र (शायद एक पार्क या कुछ) चिह्नित करना चाहिए। – yuf

0

ऐसा लगता है कि नक्शा ओवरले को रीफ्रेश करने के लिए मजबूर करता है। शायद एनोटेशन भी।

[self.mapView setCenterCoordinate: self.mapView.center समन्वयक];