प्रस्तावना
नमस्कार दोस्तों , शुरुआत में मैं लेख के उद्देश्य को तुरंत रेखांकित करूंगा: यदि आपको अपने iOS मोबाइल क्लाइंट में
यांडेक्स मैप को
अपडेट करने या एम्बेड करने की आवश्यकता है, तो
अपना समय बचाएं , साथ ही अपने अनुभव को साझा करने की इच्छा रखें।
हमने एक बार YandexMapkit एप्लिकेशन में बनाया (लगभग अक्टूबर 2017 में) ईमेल कार्ड के बजाय (कुछ भी नहीं - केवल व्यवसाय)। लगभग 3 महीनों के बाद, एक सुंदर सर्दियों के दिन, कार्ड के एंड्रॉइड संस्करण 2 के दिन क्रम से बाहर हो गए क्योंकि चाबियाँ, कार्ड सिर्फ एक कद्दू में बदल गया) मैनुअल से क्या टिप है: "एंड्रॉइड कार्ड टूट गए थे, वे नहीं जानते कि इसे कैसे ठीक किया जाए"। iOS क्लाइंट के रूप में, यह प्रभावित नहीं करता था। Android पर गरीब लोग ... इस बार लोगों का कोई लेना-देना नहीं था। उन दिनों में
, कई लॉज गिर गए : रूस का पद, प्लैटिपस, शायद आप लोगों को याद है?

यह कहना है कि जब आपका आवेदन तृतीय-पक्ष सेवाओं से बंधा हुआ है, तो इस मामले के लिए एक योजना "बी" होना अच्छा होगा, उदाहरण के लिए, ऐप्पल से कार्ड के पिछले संस्करण पर स्विच करें, और एक को दूसरे के साथ न बदलें ...
एक और 3 महीने के बाद, मार्च में, यैंडेक्स से एक पत्र आया कि उन्होंने आखिरकार अपडेट किया है एसडीके, (बहुत कम समय बीत चुका है, पिछले अपडेट से 4-5 साल):
"-उपदेश, एक वर्ष में पुराने को बंद करें," संक्षेप में। इससे पहले, बस एक पुराने संस्करण 1.0 था

ठीक है, निश्चित रूप से, इस तरह की चेतावनी के बाद, हमने खींच नहीं किया और तुरंत संक्रमण शुरू कर दिया ... 3 महीने बाद)) अगस्त में।
"टिप्पणी" का चरण! (कार्यक्षमता अक्षम करना)
आप कहते हैं, हा ... वहां क्या अपडेट किया गया है, पॉड अपडेट किया गया है, एक-दो स्थानों को ठीक किया है और वह सब है। तो नहीं, दोस्तों, नया मैप एपीआई पुराने के साथ बिल्कुल संगत नहीं है, और इसके अलावा, जैसा कि बाद में पता चला, यहां तक कि कई महत्वपूर्ण आवश्यकताएं हैं जो पुराने संस्करण और अन्य कार्ड लाइब्रेरी में बॉक्स से बाहर हैं!
तो, मैपकिट 3.0 (एक आलेख संस्करण 3.1 लिखते समय जारी किया गया था),
प्रलेखन का एक
लिंक ।
और क्यों Yandex से एक चेतावनी के अलावा? इस बीच, Xcode 10 के बीटा संस्करण पर, एक पुरानी व्हेल के साथ एक परियोजना बेवकूफी से नहीं चल रही है, क्योंकि C ++ का उपयोग कहीं अंदर किया जाता है, जिसे नए संस्करण में चित्रित किया गया है। उप-सूची में इसका नाम बदलना आवश्यक है, यहां तक कि इसे अपडेट करें, आदि, संक्षेप में, मैंने ऐसा नहीं किया, क्योंकि अंत में मुझे अभी भी अपडेट करने की आवश्यकता है
1) हम sdk को अपडेट करते हैं, संस्करण 1.0 के बजाय तुरंत 3.0, बेशक एपीआई बदल गया है, लेकिन इतना ...।
तो पुराने YMKAnnotation प्रोटोकॉल बस गायब है

स्विफ्ट में, यह एक मजबूर-जाली स्ट्रिग की तरह दिखता है: (जो गुलजार नहीं है, और फिर आप एक "!" अपने आप को ले जाते हैं ... प्रोटोकॉल कार्यान्वयन का उदाहरण।

खैर, आइए फिर से लिखें) हमारा अपना, केवल समन्वय () पद्धति के बजाय हम गुण बना देंगे, सब कुछ सरल है, विधि निरर्थक है; शीर्षक (!) एक अनियंत्रित शीर्षक () द्वारा प्रतिस्थापित किया जाता है, दूसरी ओर, आप एक संपत्ति बना सकते हैं, अच्छी तरह से, बहुत कुछ, जहां आपको परियोजना को बदलना होगा, इसलिए मैंने केवल विस्मयादिबोधक चिह्न हटा दिया।
हमारी परियोजना में, 3 नियंत्रकों को दो बार बदलना आवश्यक था, एक दूसरे में CoreLocation को आयात करें, क्योंकि अब यह यैंडेक्स मैपपॉकेट हेडर में से किसी में आयात नहीं किया गया है।
पूरे प्रोजेक्ट में परिचित YMKMapCoordinate (पुरानी व्हेल) का नाम नहीं बदलने के लिए, YMKPoint (नई व्हेल) के लिए टाइपेलिया बनाया

2) इसके अलावा, चलिए कुछ गुणों की घोषणा करते हैं, जिन्हें हमें भविष्य में नक्शे के साथ काम करने की आवश्यकता होगी, मुख्यतः गेटर्स:

3) पहली चीज़ बनाने के लिए YMKMapView (इसके साथ सब कुछ ठीक है, ऐसी वस्तु अभी भी उपलब्ध है)। पहले, मैंने इसे अभी इनिशियलाइज़ किया था, अब आप ऐसा नहीं कर सकते, यह क्रैश हो जाएगा, क्योंकि पहले आपको चाबी लगाने की जरूरत है! वर्तमान कुंजी काम नहीं करेगी और आपको एक नया मांगना होगा। प्रलेखन के अनुसार AppDelegate में जोड़ें। कुंजी सेट करने के बाद ही, हम YMKMapView बना सकते हैं और इसे उस तरीके से कॉन्फ़िगर कर सकते हैं जिस तरह से हमें setupMap () विधि में आवश्यक है

यहां क्या होता है, हम बाद में उचित सेटिंग्स की आवश्यकता के बारे में विस्तार से विश्लेषण करेंगे
4) आगे क्या है, और फिर हमारे पास CLLocation का प्रारंभिक स्थान था, लेकिन अब इसका उपयोग करने के लिए आपको कोरलोकेशन फ्रेमवर्क को मैन्युअल रूप से जोड़ने की आवश्यकता है, या ... यांडेक्स मैपकिट से इसे YMKPoint के साथ बदलें।

5) इसके अलावा, नक्शा एक बहुत ही सरल विधि द्वारा इस समन्वय पर केंद्रित था, लेकिन अब कोई सरल नहीं है

लेकिन थोड़ा और अधिक जटिल और थोड़ा गहरा है, नक्शा वस्तु) ... mapView.mapWindow.map -Move। यहाँ हम YMKCameraPosition जैसी किसी वस्तु के अस्तित्व के बारे में सीखते हैं।

6) अगला, हम नक्शे के विन्यास पर टिप्पणी करते हैं, क्योंकि इस तरह के कोई एपीआई / गुण नहीं हैं। अब हम कम से कम न्यूनतम रूप से शुरू करने के लिए इसे छोड़ देते हैं।
हम एनोटेशन जोड़ने पर टिप्पणी करते हैं, (मैं ध्यान देता हूं कि यह मानक कार्यक्षमता है), हम निकटतम बिंदु दिखाने पर भी टिप्पणी करते हैं (यह पहले से ही हमारी कार्यक्षमता का कुछ प्रकार है)।
और पूरे YMKMapViewDelegate भी कमेंटरी है, जो मुझे नए ढांचे में नहीं मिली, और इसी तरह का एक एनालॉग भी।

मैंने कार्यान्वयन को छोड़ दिया, केवल स्वयं विधियाँ:
- उपयोगकर्ता का स्थान प्रदर्शित करना है या नहीं,
- पिन के लिए उपयोग करने के लिए कौन से विचार,
- एनोटेशन पर क्लिक करने पर प्रतिक्रिया,
- एनोटेशन के लिए क्या कहते हैं,
- कॉलआउट पर क्लिक करने की प्रतिक्रिया, जो कि आमतौर पर हम उपयोग करते हैं। अंत में, हमारी विधि का कुछ प्रकार था, जो एक विशिष्ट एपीआई कार्ड का भी उपयोग करता था।
हर कोई MapVC के साथ लगा - यह मुख्य वर्ग है जहां मैपकिट का उपयोग किया गया था
7) कस्टम कॉलआउट पर एक छोटी सी टिप्पणी, यह अब YMKCalloutView को इनहेरिट नहीं करेगा, नई व्हेल में कोई अधिक नहीं है।
हुर्रे, अब परियोजना एकत्र हो गई है, मैं सब कुछ शुरू करने में सक्षम था और ... बॉक्स में नोटबुक देखें, क्योंकि इसके शुरू होने के बाद, आपको "वार्म अप") को समय देने की आवश्यकता है), लेकिन मुझे इसके बारे में नहीं पता था और सोचा था कि कुछ नहीं किया गया था। इसलिए, हालांकि मैंने सुझाव दिया कि कुंजी को सक्रिय करने में समय लगता है। यह अनुमान सही निकला। आपको लगभग एक घंटे प्रतीक्षा करने की आवश्यकता है (शायद अब कुछ बदल गया है)।
पुराने एपीआई को नए तरीके से संशोधित करने के एक और प्रयास के साथ, मानचित्र प्रदर्शित किया गया था।
चरण दो - "खोज" (पुरानी कार्यक्षमता को नए तरीके से कैसे लागू करें)
चलो खो कार्यक्षमता को पुनर्स्थापित करना शुरू करते हैं। तो, आपको उपयोगकर्ता लॉक प्रदर्शित करने की आवश्यकता है, लेकिन पुराने तरीके से सिर्फ संपत्ति को बदलना और प्रतिनिधि को सेट करना नहीं हो सकता है।
अब यह परत के माध्यम से किया जाता है, setupMap () विधि बिंदु 3 देखें।
हम डेमो में उदाहरण पर
एक नज़र डालेंगे (
यैंडेक्स गीथूब से डाउनलोड करें ), क्योंकि यह वहां है। वैसे, आपको setAnchorWith पर ध्यान देने की आवश्यकता है। बाद में मैं कहूंगा कि क्यों, यह ज़ूम के साथ जुड़ा हुआ है। ठीक है स्थान काम करता है।
2) आगे क्या है, ज़ाहिर है, एनोटेशन। आप पुराने तरीके से नहीं जोड़ सकते, हम फिर से डेमो में देखते हैं। वहाँ एक वर्ग है - MapObjectsViewController। नए संस्करण में, नक्शे में पिन जोड़ने के लिए, प्रतिनिधि की आवश्यकता नहीं है, इसके लिए आपको मैपऑब्जेक्ट संपत्ति का उपयोग करने की आवश्यकता है, ऑब्जेक्ट पर एडप्लास्मार्क विधि को कॉल करें, और वहां समन्वय पास करें (अभी भी अन्य लोड हो रहे हैं) उदाहरण:

हम एनोटेशन के संग्रह पर पुनरावृत्ति करते हैं (उदाहरण के लिए, सर्वर से प्राप्त करने के बाद) और नक्शे में एक जोड़ें। विधि, वैसे, "placeMark" (स्थान लेबल) देता है, जिसका उपयोग अतिरिक्त सेटिंग्स बनाने के लिए किया जा सकता है, उदाहरण के लिए, zIndex संपत्ति के माध्यम से प्रदर्शन क्रम को बदलें।
यहाँ, हालाँकि, मैं इस बिंदु से चूक गया कि इससे पहले कि मैं एक प्रतिनिधि की खोज में चढ़ गया और इसे सुरक्षित रूप से नहीं पाया, और एक भी प्रतिनिधि बिल्कुल नहीं (वास्तव में, उन्हें बस अलग तरह से बुलाया जाने लगा, अब वे श्रोता हैं)। मैं Apple व्हेल और पुराने Yandex व्हेल के साथ पिछले अनुभव से जानता हूं कि एनोटेशन का पुन: उपयोग किया जाता है, जैसे कोशिकाओं के साथ, लेकिन डेमो में केवल ऐडप्लास्मार्क है। यांडेक्स-कार्ड लीड के बारे में सवाल करने के लिए (एक छोटे से निजी परिचित ने यहां मदद की) "- स्मृति उपयोग, पुन: ऑब्जेक्ट्स का अनुकूलन कैसे करें?" उत्तर: "क्यों, इसलिए यह ठीक काम करता है" ... अच्छी तरह से, हाँ, यह काम करता है।
नोट: 1) यह ध्यान रखना महत्वपूर्ण है कि Yandex.Maps एक मानचित्रक का उपयोग करते हैं, और इसे विकसित नहीं करते हैं। यह मैपकिट टीम (हब पर निकोलाई का उपनाम - likhogrud @) द्वारा किया जाता है।
2) स्पष्टीकरण क्यों वस्तुओं का पुन: उपयोग नहीं किया जाता है:
पुरानी व्हेल में, एनोटेशन व्यूज विचार थे, वे उपयोगकर्ता द्वारा बनाए गए थे, और निश्चित रूप से विचारों का पुन: उपयोग करने की आवश्यकता है, क्योंकि उन्हें बनाना सस्ता नहीं है। नए व्हेल में, मैपमार्क द्वारा सीधे खुले जीएल में जगह बनाई जाती है। और शायद वे वहां पुन: उपयोग किए जाते हैं, लेकिन यह गलत है। किसी भी मामले में, यह एक दृश्य बनाने की तुलना में बहुत अधिक कुशल है।
3) नए से, वैसे, उपयोगकर्ता के लिए एनोटेशन आइकन को संशोधित करने की संभावना है। निम्नानुसार लागू किया गया है: आपको एक श्रोता (प्रतिनिधि के एनालॉग) को जोड़ने की आवश्यकता है, उपयुक्त प्रोटोकॉल को लागू करें - 3 विधियों में से 1, 2 बस खाली छोड़ दें।
उसी समय, हमारे चिह्न के साथ स्थान-चिह्न पुनः लोड करें।

इसके अलावा, मैं एंकर की संपत्ति की ओर आपका ध्यान आकर्षित करता हूं। मानचित्र पर उपयोगकर्ता का स्थान बटन दबाने के बाद, कैमरा फोकस को केंद्र के केंद्र में ले जाता है। लेकिन परेशानी यह है, फिर से कार्रवाई दबाने से उत्पादन नहीं होता है। गु? हम एंकर विधि पर टिप्पणी करते हैं और सब कुछ काम करता है।
4) अब आपको क्लिक आउट का पता लगाने के लिए क्रमशः कॉलआउट दिखाना होगा। इंटरफेस में कई विधियां हैं, सही एक YMKMapObjectTapListener है। 1 महत्वपूर्ण दिलचस्प विधि है जिसके साथ मुझे बाद में खुद को पीड़ा देना पड़ा था, यह सच है ताकि ग्राहक को मिल जाने पर इसे एकीकृत न किया जा सके। मैं आपका ध्यान आकर्षित करता हूं, आपको पहले सदस्यता लेने की जरूरत है, मैपऑब्जेक्ट को सब्सक्राइब किया जाएगा (लाइन 149)।


तो क्लिक पूरा करता है।
हुर्रे । फिर भी, हालांकि, केवल दृश्य क्षेत्र में पिंस प्रदर्शित करने का प्रयास किया गया था, यह शानदार है, एक ही बार में सब कुछ दिखाओ, तो चलो इसे छोड़ दें (सिर्फ इसलिए कि यह धीमा न हो)
5) तब मैं बटन को सुविधा के लिए ज़ूम इन / आउट करना चाहता था। थोड़ा कॉपी-पेस्ट और स्थान बटन के साथ सादृश्य द्वारा संपादन, और आप कर रहे हैं।
इसके अलावा, चूँकि हम कैमरा के बारे में जानते हैं, चाल विधि का उपयोग करते हैं और, तदनुसार, वर्तमान ज़ूम + - 1 या 0.5, जैसा कि आपको चाहिए। यहां सब कुछ ठीक है।

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

कैसे हैं आप लोग? 100 500 एप्लिकेशन कॉलआउट का उपयोग करते हैं।
हम "तकनीकी सहायता" (कोल्या) में अच्छी तरह से लिखते हैं कि यह मैन्युअल रूप से कैसे किया जाता है, मुझे पता है। आपके पास क्या विकल्प हैं?
चित्र को किसी चित्र में बदलें, क्योंकि आप सीधे दृश्य नहीं जोड़ सकते हैं (3.1 में एक फ़ाइल जोड़ी गई), आइकन बदलें ...

ये बैसाखी एक फ्लैट पर प्राप्त की जाती है, यह जगह लग रही थी।
वास्तव में, बैसाखी नहीं, निश्चित रूप से, लेकिन बस अनुपस्थिति मैं बुनियादी कार्यक्षमता पर विचार करता हूं
7) ठीक है, चलो पहले एक परीक्षण कॉलआउट जोड़ें, जैसे कि हम एक लाल वर्ग का उपयोग करते हैं। तो, हमारे पिन पर क्लिक करके, प्रतिनिधि / श्रोता विधि को कहा जाता है, जहां क्लिक बिंदु और ऑब्जेक्ट स्थानांतरित हो जाते हैं। एक चाल की उम्मीद किए बिना, हम "बिंदु" को उस बिंदु के रूप में लेते हैं जहां आप कॉलआउट जोड़ना चाहते हैं। (ध्यान दें, क्या सब कुछ सही ढंग से किया गया है: "उन्होंने क्लिक किया, बिंदु लिया, इसे बांध दिया?" लगभग 80% ने सही उत्तर दिया, 20% - नहीं)

और विधि निकाय में showCallout सहायक विधि को कॉल करें:

लाइन 544
अंदर, लाल का एक परीक्षण दृश्य बनाएं, चालीस से चालीस, इसे एक तस्वीर में परिवर्तित करें, 0.5 के मूल्य के साथ एक स्थिर x घोषित करें, इसका उपयोग बिंदु के बीच में कॉलआउट के त्रिकोण को स्थिति में लाने के लिए किया जाएगा। उन्होंने अपने पद को बदलने के विचार से इनकार कर दिया, बाद में कैमरे को स्थानांतरित करना पसंद किया ताकि चयनित कॉलआउट फोन स्क्रीन के बीच में प्रदर्शित हो
इसके बाद, हम टैपटेबल के "पुश" क्षेत्र की घोषणा करते हैं, पिन के लिए आइकन शैली में ऐसी संपत्ति है। ओह ठीक है, आप क्लिक क्षेत्र को सीमित कर सकते हैं, और हम इसे करेंगे। यह क्षेत्र 0.0 से लेकर 1.1 तक है। हमें निचले हिस्से की आवश्यकता है, जहां माना जाता है कि एक बटन है जो पहले (याद) में एक तस्वीर में तब्दील हो गया था। ठीक है, इसका मतलब है कि क्षेत्र (0,0.5 - 1.1) चूंकि बटन नीचे है।
ज़ोन प्रतिबंध काम करता है, लेकिन एक अति सूक्ष्म अंतर है, जैसे कि यह सब कुछ नकारता है। यदि गैर-दबाव वाले क्षेत्र के तहत एक और पिन है, तो दबाने पर काम करेगा। इस क्षेत्र का अर्थ? क्या वे कोई झंडा या कुछ ऐसा बनायेंगे ताकि क्लिक पास न हो। ठीक है ...
550 लाइन
आइए आइकन के लिए एक शैली बनाएं, आप पहले पैरामीटर में लंगर की स्थिति को तुरंत निर्दिष्ट कर सकते हैं, उदाहरण के लिए, मैंने रेखा 557 पर नीचे किया था। स्थिति y 1.05 पिन के ऊपर त्रिकोण को फिर से खड़ी करने के लिए है
559 लाइन
एक निश्चित आकार का हमारा कस्टम कॉलआउट बनाएं,
हम उन क्षेत्रों को कॉन्फ़िगर करते हैं, जिन्हें हमें चयनित एनोटेशन से चयनित सूचना का उपयोग करने की आवश्यकता है, विशेष रूप से शीर्षक और उप-शीर्षक, इस कॉलआउट के लिए बटन पर शिलालेख। फिर आप खुद वही कर सकते हैं जो आप चाहते हैं। चयनित एनोटेशन को पहले प्रतिनिधि में परिभाषित किया गया है। लेकिन अभी के लिए, पहले बनाया गया लाल वर्ग जोड़ें
अगला, mapObjects संग्रह में एक पिन जोड़ें, विधि हमारे लिए जोड़ा स्थान-चिह्न लौटाएगा, इसे एक चर में बचाएगा,
कॉलआउट पर क्लिक करने से, एक विस्तृत नियंत्रक खुलता है, और इसलिए बारीकियों का मतलब है, अगर पॉपअप के तहत एक और पिन दर्ज किया जाता है, तो प्रतिनिधि फिर से काम करेगा, इसलिए यहां आपको zIndex के माध्यम से पदानुक्रम में आदेश को बदलने की आवश्यकता है। दृश्यता सेट करें और लाइन 564 पर हमारे कॉलआउट को केंद्र में ले जाएं
बारीकियाँ : चर स्थान चिह्न कॉलआउट करने के लिए एक सूचक है।
पहले हमारे पास यह नहीं है, पिन पर क्लिक करने के बाद, ऐसा प्रतीत होता है, अगले पिन पर क्लिक करने के बाद, हमें अपना पहला कॉलआउट हटाना होगा और एक नया जोड़ना होगा। इसलिए, यदि वैरिएबल स्थान-चिह्न! = निल, तो आपको मैपऑब्जेक्ट्स संग्रह से पुराने कॉलआउट को निकालने की आवश्यकता है)

इसके अलावा, कार्ड पर तपस के मामले में, आपको कॉलआउट को छिपाने की आवश्यकता है, इसलिए प्रतिनिधि पद्धति में हम एक स्थान-चिह्न प्रदान करते हैं, पर्यवेक्षक काम करता है, कॉलआउट हटा दिया जाता है, साथ ही हम चयनित एनोटेशन को हटा देते हैं
इसके लिए, हमने पहले YMKMapInputListener के लिए साइन अप किया

बदले में, विचारों को परिवर्तित करने की विधि इस प्रकार है। (संस्करण 3.1 में, नक्शे में दृश्य जोड़ने की क्षमता जोड़ी गई)
मैं यह नहीं बता सकता कि दृश्य कैसे करना है), लेकिन अगर इसमें बहुत सारी समस्याएं होंगी (यह एक त्रिकोण के साथ संभव है), तो लिखिए, मैं इस चरण को जोड़ूंगा

ऊँचाई पर जोड़े गए जादू 20 को नीचे त्रिकोण के नीचे एक स्थान के लिए आवश्यक है, जिसे आपको खींचना होगा
हम यह भी चाहते हैं कि पॉपअप एक विशिष्ट स्थान (बाईं, दाईं, मध्य में) में पिन करने के लिए पॉप अप (संलग्न) हो, इसके लिए एक एंकर संपत्ति है। निम्नानुसार परिभाषित:
हम मानचित्र के दृश्य क्षेत्र को 3 ऊर्ध्वाधर क्षेत्रों में विभाजित करते हैं और निर्धारित करते हैं कि हम किस में हैं, इस पर निर्भर करते हुए, बंधन की स्थिति को बदलते हैं। कोड उदाहरण में, हम जांचते हैं कि क्या हम बाईं ओर हैं, सादृश्य द्वारा हम मध्य के लिए करते हैं, यदि बाएं नहीं और मध्य में नहीं, क्रमशः, दाईं ओर बिंदु है

यदि कोई बिंदु किसी क्षेत्र में पड़ता है, तो यह देखने के लिए एक सहायक कार्य करता है:

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

7) हम डिबग शुरू करते हैं, निर्देशांक समान हैं

फिर समझने की कोशिश की गई कि क्या हो रहा है और यह कैसे काम करता है, डेमो में एक और वापसी, मतभेदों के लिए एक और भी अधिक चौकस खोज ...

मुझे लगता है कि निर्देशांक सीधे प्रेषित होते हैं, न कि वह जो नल पर होता है! लेकिन मैंने डिबेट किया, यह स्पष्ट है कि निर्देशांक समान हैं, अर्थात, वृत्त और वर्ग में समान समन्वय है।
यही कारण है कि विधि में मैंने तुरंत ऑब्जेक्ट का उपयोग नहीं किया, लेकिन पारित बिंदु, जो गलत है।

लेकिन क्या आपको एक ऑब्जेक्ट कास्ट करने की ज़रूरत है, एक प्रॉपर्टी लें (हर जगह सब कुछ अलग-अलग तरह से कहा जाता है, फिर समन्वय करें, फिर बिंदु, यहां अब ज्यामिति है) क्या यह ऐसा रचनात्मक या क्या है? 493 लाइनें

चूँकि हमें दो दबाने के विकल्पों पर प्रक्रिया करने की आवश्यकता है: पहला पिन करने के लिए, दूसरा कॉलआउट करने के लिए, न कि क्लिकों को संसाधित करने के लिए यदि हम फिर से उसी पिन पर क्लिक करते हैं, तो सबसे
पहली बात यह है कि हम पिन को पिन संग्रह में क्लिक किए हुए पाते हैं, तुलना करते हुए 495 लाइन का समन्वय करता है, अन्यथा सच लौटाता है, जिससे यह कहा जाता है कि हमने क्लिक को संसाधित किया और आगे पदानुक्रम में जाने की आवश्यकता नहीं है
दूसरा : हम इसे पिन पर या कॉलआउट पर क्लिक करके निर्धारित करते हैं, हम 499 लाइन लेबल के निर्देशांक की भी तुलना करेंगे। समानता परीक्षण:
इसके अलावा, अगर यह कॉलआउट है और हम बटन क्लिक का जवाब देना चाहते हैं (या अनुकरण करें, क्योंकि अब यह एक तस्वीर है), और पूरे क्षेत्र में नहीं, तो हमें पेन के साथ कुछ गणना करने की आवश्यकता है :)
- कन्वर्ट विश्व 501 स्क्रीन के लिए समन्वय
हम अपने आप पर विचार करते हैं: हम मानचित्र निर्देशांक को स्क्रीन में परिवर्तित करते हैं, हम जानते हैं कि हम कहाँ स्थित हैं, फिर दृश्य की चौड़ाई और ऊँचाई जोड़कर, हमें कोने के अंक मिलते हैं, लेकिन किसी कारण से वे मेल नहीं खाते हैं और मैं मैन्युअल रूप से तीन गुना हो गया, 10 वीं iPhone के लिए मेरे मामले में)। जैसा कि यह बाद में निकला, मैं भूल गया और प्रति बिंदु पिक्सेल की संख्या को ध्यान में नहीं रखा। जिसे हम 1x, (एक बिंदु 1 पिक्सेल), 2x, 3x एक बिंदु तीन पिक्सेल कर सकते हैं। - आइए हम बटन की ऊंचाई की गणना करते हैं - कॉलआउट की ऊंचाई + त्रिकोण के पैमाने की ऊंचाई, पैमाने के बारे में जानकारी (रेखा 498)। अगला, हम यह सब दो में विभाजित करते हैं, क्योंकि बटन की ऊंचाई कॉलआउट की आधी ऊंचाई है
- फिर हम कोणों के निर्देशांक की गणना करते हैं, इस तथ्य पर आधारित है कि एंकर (x: 0.5, y: 1), त्रिकोण के पैमाने और क्षेत्र को देखते हुए)
- फिर इन स्क्रीन कॉर्डिनेट्स को दुनिया में बदलें
- उनके आधार पर एक दृश्य क्षेत्र बनाएं, एक बटन ज़ोन है
- और हम जांचते हैं कि हमने बटन ज़ोन मारा या नहीं। यदि आप हिट करते हैं, तो एनोटेशन के प्रकार की जांच करें, उस प्रकार के आधार पर जिसे हम अपनी कुछ विधि कहते हैं: विस्तृत स्क्रीन पर जाएं या स्टोरपॉप के साथ मामलों में वितरण के लिए इस स्टोर का चयन करें
अन्यथा, यह पिन पर एक क्लिक है और हमें एक कॉलआउट जोड़ना होगा, जिसे हमने वास्तव में ऊपर किया था।
यही सब है, इस नई व्हेल के साथ शुरुआती परिचित खत्म हो गया है।
मैं और क्या कहना चाहता हूं, मैपकिट मानचित्रों के वर्तमान कार्यान्वयन में इसमें बहुत अधिक कार्यक्षमता है जिसका उपयोग नहीं किया जाता है, यह परिणामी बाइनरी के आकार को भी प्रभावित करता है। क्या आप इस तरह के बलिदान के लिए तैयार हैं, भविष्य में, लोगों को सभी के बाद मॉड्यूल में ध्वस्त कर दिया जाना चाहिए । मैंने वर्कशॉप से एंड्रॉइड पर सहकर्मियों से यह भी सुना कि कोटलिन के साथ संगतता में समस्याएं हैं।
पुनश्च जब मैंने फैसला किया और एक लेख लिखना शुरू किया, तो अद्यतन 3.1 सामने आया, जहां उपरोक्त समस्याओं को हल किया गया और कार्यान्वित किया गया:
जोड़ा गया
Android के लिए, arm64 और x86 बिल्ड दिखाई दिए।
आप मानचित्र में कोई भी दृश्य ऑब्जेक्ट जोड़ सकते हैं।
साइकिल रूटिंग दिखाई दी है।
Android के लिए nullable एनोटेशन जोड़ा गया।
बदला
MapKit भागों में टूट गया है:
MapKit - केवल एक नक्शा;
MapKit दिशाएँ - कार मार्ग;
MapKit परिवहन - पैदल यात्री मार्ग, सार्वजनिक परिवहन मार्ग और साइकिल मार्ग;
MapKit खोज - खोज और जियोकोडिंग;
MapKit Places - पैनोरमा।
IOS के लिए, अशक्त एनोटेशन अधिक कठोर हो गए हैं।
फिक्स्ड
कीड़े की एक संख्या तय की गई है।
बेहतर प्रदर्शन।
tech.yandex.ru/maps/doc/mapkit/3.x/concepts/versions-docpageअपनी टिप्पणी, प्रश्न लिखें।