2012-11-23 14 views
7

मैं एक ऐप्स जहाँ मैं काल्पनिक विमानों से और हवाई अड्डों के लिए उड़ान दिखाना चाहते हैं विकासशील कर रहा हूँ। यह एकमात्र चीजें नहीं हो सकती है जिन्हें मैं मानचित्र के माध्यम से उड़ाना चाहता हूं।चलती MKOverlayPathView के पीछे गायब हो जाता है टाइल

इसके लिए मैंने लोकेशन रेमिन्डर (एमकेओवरलेपैथ व्यू सबक्लास, उनके पास, रिमाइंडरक्रिकल व्यू) से नमूना कोड का उपयोग किया और इसे अपने स्वयं के विमान का प्रतिनिधित्व करने वाले एमकेओवरले से जोड़ा। यह वर्ग ओवरले क्लास के समन्वय और त्रिज्या गुणों पर केवीओ नोटिफिकेशन की सदस्यता लेती है और प्रत्येक बार अपडेट होने पर अपने पथ को अमान्य कर देती है।

ओवरले कई फ्रेम प्रति सेकंड पर अपनी स्थिति अपडेट करता है और मैं इसे त्रिज्या भी अपडेट करता हूं ताकि मैं परिप्रेक्ष्य अनुकरण कर सकूं (यह बहुत अच्छा स्मार्ट नहीं है क्योंकि यह एक मॉडल ऑब्जेक्ट है लेकिन अभी भी मुझे मिला सबसे अच्छा समाधान है)।

मैं परीक्षण के लिए एक सरल सर्कल पथ का उपयोग कर रहा हूं।

यह सेटअप ठीक काम करता है। ओवरले व्यू अपडेट हो जाता है और यह नक्शे और सभी के साथ स्केलिंग सही ढंग से व्यवहार करता है।

समस्या यह है कि एक नकली उड़ान में ओवरले टाइल्स के ऊपर बनाया नहीं जाएगा, गंतव्य के पास सामान्य रूप से है। सर्कल दिखता है जैसे इन टाइल्स के पीछे जा रहा है।

मैं इस समस्या में एक बात को समझने में सक्षम था: जब भी मैं निरीक्षण चक्र कुछ टाइल पर तैयार नहीं किया जा रहा है, तो मैं बाहर ज़ूम चक्र सही ढंग से तैयार किया जाएगा। ज़ूमिंग या पैनिंग हालांकि कुछ भी हल नहीं करता है।

मेरे सिद्धांत है कि टाइल्स (या उनके नक्शे rects) के कुछ redrawing और हां, तो केवल ज़ूम आउट करके मुझे लगता है कि मजबूर कर सकते हैं के लिए चिह्नित नहीं किया जा रहा है। लेकिन फिर भी मुझे लगता है कि इस तथ्य के अनुरूप नहीं है कि ज़ूम इन करने में मदद नहीं होती है।

मुझे नहीं पता कि मैं कुछ गलत कर रहा हूं या यदि मैं एक बग या कुछ में कूद रहा हूं। मैंने इसके बजाय एनोटेशन का उपयोग किया है और यह काम कर रहा था, लेकिन इसके साथ ही मैं उस विमान का प्रतिनिधित्व करने की क्षमता खो देता हूं जो छोटे हो जाता है यदि आप ज़ूम स्केल को देखे बिना ज़ूम आउट करते हैं।

मैं संस्करणों 5.1, 6.0 और 6.1 में परीक्षण किया है और व्यवहार में ही है।

उत्तर

2

मुझे समझ में आया कि उस व्यवहार का कारण क्या था।

मेरे MKOverlay पर मैं प्रत्येक स्थिति अद्यतन पर विमान की स्थिति से मेल खाने के लिए boundingMapRect बदल रहा था। असल MKMapView केवल शुरुआत में इसके लिए MKOverlay पूछता है (मैं -(BOOL)intersectsMapRect:(MKMapRect)mapRect के लिए कॉल की जाँच करके यह पता चल गया)।

एक परीक्षण के रूप में मैंने पूरी दुनिया (boundingMapRect = MKMapRectWorld;) से मेल खाने के लिए boundingMapRect बदल दिया और यह काम किया। तो यह केवल मेरे विमान के रास्ते के आसपास MKMapRect बनाने का मामला था और वह था।

अनुमान आयत कि ओवरले शामिल हैं:

खैर, एप्पल boundingMapRect के बारे में निम्नलिखित कहा गया है। (आवश्यक) (केवल पढ़ने के लिए) इस संपत्ति में सबसे छोटा आयताकार है जो पूरी तरह से ओवरले क्षेत्र को शामिल करता है। इस प्रोटोकॉल के कार्यान्वयनकर्ताओं को अपने ओवरले क्लास को लागू करते समय इस क्षेत्र को सेट करना होगा। आयताकार को अनुमानित निर्देशांक का उपयोग करके निर्दिष्ट किया जाना चाहिए-अर्थात, दुनिया को दो-आयामी सतह पर प्रक्षेपित करके प्राप्त निर्देशांक।

और मैं कहेंगे कुछ की तरह:

अनुमान आयत कि ओवरले शामिल हैं। (आवश्यक) (केवल पढ़ने के लिए) इस संपत्ति में सबसे छोटा आयताकार है जो पूरी तरह से क्षेत्र को शामिल करता है जो ओवरले को में प्रस्तुत किया जा सकता है। इस प्रोटोकॉल के कार्यान्वयनकर्ताओं को अपने ओवरले क्लास को लागू करते समय इस क्षेत्र को सेट करना होगा। आयताकार को अनुमानित निर्देशांक का उपयोग करके निर्दिष्ट किया जाना चाहिए-अर्थात, दुनिया को दो-आयामी सतह पर प्रक्षेपित करके प्राप्त निर्देशांक।

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