2011-04-15 7 views
12

सहायता अब जरूरत पर MKOverlayView साथ चाप/वक्र रेखा खींचना। मैं MKPolyline और MKPolylineView साथ लाइनों आकर्षित कर सकते हैं, लेकिन कैसे MKMapView पर दो निर्देशांकों के बीच एक चाप या वक्र लाइनों आकर्षित करने के लिए? ग्रेट धन्यवाद।कैसे MKMapView

अंतिम समाधान

अंत में मैं अपने आप को इन निष्कर्षों यहाँ लिखा था, जो यह चाहते हैं।

आप करना चाहते हैं:

  • सिर्फ नक्शा
  • पर एक छवि आकर्षित
  • तो मानचित्र पर ओवरले के रूप में चाप पथ और छवि गठबंधन

    1. बस नक्शे पर चाप पथ आरेखित समाधान हैं:

      1. वहाँ MKPolyline और MKPolylineView, MKPolygon और MKPolygonView बहुभुज आकर्षित करने के लिए लाइनों आकर्षित करने के लिए, MKCircle और MKCircleView हलकों आकर्षित करने के लिए कर रहे हैं। कोई फिट नहीं है? एक चाप कहाँ है? अरे हाँ। अब वास्तव में समाधान: आप -createPath में आपके द्वारा बनाए गए एक चाप का उपयोग CGContextAddArcToPoint या दूसरों कार्यों आप की तरह से प्राप्त MKOverlayPathView एक कस्टम वर्ग बना सकते हैं और ओवरराइड -createPath विधि, और पथ सिर्फ सहयोगी आप MKOverlayPathView की राह संपत्ति को बनाने और कस्टम काम करता है किया जाता है। फिर आप मानचित्र में एमकेपोलीलाइन जोड़ते हैं (हां! बस एमकेपोलीलाइन!), फिर -mapView: viewForOverlay: विधि जिसे आप कस्टम क्लास बनाते हैं वह पॉलीलाइन लेते हैं। फिर, बस इसे चलाएं, जैसा चाहें सबकुछ चलता है। जादू? यदि आप एक MKPolyline एक चाप के रूप में आकर्षित कर सकते हैं!
      2. बस एक चित्र? MKAnnotationView का उपयोग करें। हो गया है! तुम कर सकते हो! मेरा मानना ​​है कि!
      3. मेरी समस्या में, मैं ओवरले में एक छवि के साथ एक चाप आकर्षित करना चाहता हूं। तो मैं एमकेओवरले प्रोटोकॉल के लिए एक कस्टम क्लास अनुरूप बनाता हूं, और उस ओवरले को आकर्षित करने के लिए MKOverlayView से प्राप्त एक कस्टम क्लास। सबकुछ ठीक काम करता है लेकिन मैं मानचित्र पर कोई रास्ता नहीं खींच सकता! मैंने लाइनविड्थ को 1,2,3,4 पर सेट किया है ... लेकिन यह काम नहीं कर रहा था! आह .. समाधान MKRoadWidthAtZoomScale (zoomScale) फ़ंक्शन के साथ लाइन चौड़ाई निर्धारित करता है और आप पथ देख सकते हैं! यही कारण है कि किया है ......

      और यहाँ कुछ सुझाव:

      1. उपयोग कोर ग्राफिक पथ, नहीं MapKit निर्देशांक और न ही UIView निर्देशांक आकर्षित करने के लिए!
      2. तटरक्षक कार्यों बस मन में रेखा की चौड़ाई रखने में इस समारोह से परिवर्तित किया जाना चाहिए: MKRoadWidthAtZoomScale (zoomScale)
      3. आशा प्रलेखन पढ़ना मदद करने के लिए
    +0

    हाय, मैं अपने मानचित्र पर एक मात्र आर्क पथ खींचने के लिए अपना समाधान कोशिश कर रहा हूं लेकिन मुझे कुछ समस्याएं आ रही हैं ... क्या आप मुझे कुछ कोड दिखा सकते हैं क्योंकि मुझे वास्तव में अपने ऐप में ऐसा करने की ज़रूरत है और अब तक कोई भी कार्यप्रणाली पाएं ... अग्रिम धन्यवाद! बेन – Ben

    +0

    हाय, @ बेन। और आप अपने मानचित्र पर क्या आकर्षित करना चाहते हैं? – Shiny

    +0

    धन्यवाद! भाग 1 में आपका क्या मतलब है जब आप कहते हैं: "फिर -mapView में: viewForOverlay: विधि जिसे आप कस्टम क्लास बनाते हैं वह पॉलीलाइन लेते हैं।" क्या मुझे करना चाहिए: [[कस्टम-क्लास आवंटन] initWithOverlay: द-मकोलीलाइन-ओवरले] – spiralstairs

    उत्तर

    1

    , ऐसा लगता है कि आप एक बना सकते हैं MKOverlayPathView का उदाहरण और CGPathRef ऑब्जेक्ट को path संपत्ति पर मनमाने ढंग से असाइन करें। इस पथ में सीधी रेखाएं और चाप दोनों हो सकते हैं।

    मुझे पता नहीं है (और दस्तावेज़ीकरण का उल्लेख नहीं है) पथ के निर्देशांक (MKMapPoint या CLLocationCoordinate2D दिमाग में आने वाले प्रारूप में) होना चाहिए, लेकिन आप शायद थोड़ा प्रयोग करके इसे निकाल सकते हैं।

    +0

    धन्यवाद ओले बेगमैन। – Shiny

    +0

    आपको निर्देशांक को दृश्य के संदर्भ में बिंदुओं में परिवर्तित करना होगा, MapView में एक विधि convetCordininestestoPoints है और इसके विपरीत, यह CGPathRef बनाने में मदद कर सकता है – iDroid

    1

    आप पहले से ही अपनी टिप्पणी में अपने आप को उत्तर दिया, लेकिन मैं GitHub पर उत्कृष्ट AIMapViewWrapper परियोजना जो निर्देशांकों के एक सेट से अधिक एक चाप पथ की साजिश रचने के लिए sample code शामिल में हर किसी के बात करने के लिए करना चाहते हैं। उस प्रोजेक्ट में इसका उपयोग उस मार्ग को खींचने के लिए किया जा रहा है जिसमें विमान के नीचे एक छाया पथ शामिल है (और अन्य चीजें जैसे कि उस पथ के साथ एक विमान को एनिमेट करना)। किसी को भी इस पर एक स्टैब लेने के लिए काम में आना चाहिए।