2009-05-15 7 views
6

किसी के पास कोई विचार है कि मैं आईफोन पर निम्नलिखित कैसे कार्यान्वित कर सकता हूं? हमारे पास अमेरिका का नक्शा है, और इसमें विभिन्न क्षेत्र हैं (जलवायु क्षेत्र, मुझे विश्वास है) जो अलग-अलग रंग हैं। वे आयताकार नहीं हैं, और राज्य या ज़िप या काउंटी या किसी अन्य परिभाषित लाइनों का पालन नहीं करते हैं। तो, हमारे क्षेत्र एक बहुत गोल-वाई और यहां तक ​​कि जरूरी नहीं है।आईफोन, मानचित्र, क्लिक करने योग्य गैर-आयताकार क्षेत्रों

मैं अपने उपयोगकर्ताओं को अपने क्षेत्र पर क्लिक करने की क्षमता देने के लिए प्यार करता हूं और मैं यह कहने में सक्षम हूं कि उन्होंने किस क्षेत्र को छुआ था, लेकिन मेरे जीवन के लिए, कई सारे आयत बनाने के लिए कम वक्र पर सबसे अच्छा फिट, मैं यह नहीं समझ सकता कि यह कैसे करें।

कोई विचार?

संपादित करें: क्षेत्रों के रूप में मुश्किल के रूप में यह हो सकता है ... link text

+2

यदि नक्शा रंग-कोडित है, तो क्यों न अपने उपयोगकर्ताओं को कहीं भी क्लिक करने दें और फिर उनके द्वारा चुने गए पिक्सेल को देखें? –

+0

उह। उह। पवित्र बकवास जो शानदार है। मैं इस पर गौर करूंगा। –

+0

निखिल - 2 चीजें। सबसे पहले, अपनी टिप्पणी को एक उत्तर दें और मैं इसे स्वीकार करूंगा। लेकिन दूसरी बात, क्या आप आईफोन एसडीके से किस रंग को छुआ था, इस पर सबसे ज्यादा काम करने के लिए कोड के बारे में पता है? –

उत्तर

10

कैसे इन क्षेत्रों परिभाषित कर रहे हैं? आप बिंदु डेटा प्राप्त कर सकते हैं, तो एक CGPath का उपयोग कर बनाने के लिए:

CGPathRef path = CGPathCreateMutable(); 
CGPathMoveToPoint(path,null,xpoints[0],ypoints[0]) 
for (int i = 1; i < numpoints; ++i) { 
    CGPathAddLineToPoint(path,null,xpoints[i],ypoints[i]); 
} 
CGPathCloseSubpath(path); 

इसके बाद जब भी उपयोगकर्ता छूता है, प्रत्येक क्षेत्र के लिए, जाँच करें कि क्या यह स्पर्श बिंदु शामिल हैं:

if (CGPathContainsPoint(path,null,touchPoint,false)) ... 

और नहीं है जब आप क्षेत्रों के साथ काम हो गया जारी करने के लिए भूल जाते हैं:

CGPathRelease(path); 

ध्यान दें कि आप एक CGPathRef में कई अलग उपपथ बना सकते हैं और जब आप containmen के लिए जाँच सब उपपथ की जाँच करेगा टी।

यदि आप चाहते हैं, तो आप लाइनों को सही करने के लिए आर्क या वक्र का उपयोग करने का प्रयास कर सकते हैं, लेकिन ऐसा कुछ है जिसे मैं बहुत परिचित नहीं हूं।

+0

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

+0

तस्वीर को देखने के बाद, मैं सिर्फ उत्सुक हूं, आकार जितनी दूर है, उस छवि को कितना सटीक है? आप लगभग 44x44 पिक्सल से अधिक क्षेत्र नहीं चाहते हैं या अन्यथा उपयोगकर्ता उस पर क्लिक नहीं कर पाएगा। हालांकि, निखिल का विचार बहुत बुरा नहीं था; उस रंग पर नज़र डालें जिस पर उन्होंने क्लिक किया था। जिज्ञासा से बाहर ... क्या यह वास्तव में केवल एक छवि है जिसे आप दिखा रहे हैं, बिना किसी अन्य डेटा के इसके साथ जाना? –

+0

एड: ईमानदारी से, हम अभी योजना चरण में हैं, इसलिए मैं ग्राफिक कलाकार के साथ काम करूंगा। हकीकत में हम शायद अनुभागों में एक बड़ा नक्शा कटौती करेंगे, और ज़ूमिंग की अनुमति देंगे ताकि वे बहुत सटीक क्लिक कर सकें। हालांकि, महान टिप्पणियां। –

7

शायद आपको अपने हिट परीक्षण के लिए रंग कोडित बिटमैप की आवश्यकता है।

आपके पास प्रदर्शित करने के लिए एक बिटमैप होगा, लेकिन एक और बिटमैप जिसमें सिंगल-रंग-कोडित क्षेत्र हैं। जब उपयोगकर्ता डिस्प्ले मैप पर क्लिक करता है तो आप यह जांचते हैं कि पिक्सेल आपके हिट टेस्ट मैप में कौन सा रंग है, और उसके बाद अनुमोदित कार्रवाई करें।

+3

+1 बहुत पुरानी और बहुत साफ टोपी चाल के लिए +1 – slf

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

  • कोई संबंधित समस्या नहीं^_^