2012-02-10 6 views
9

के लिए उद्देश्य-सी में क्षेत्र में स्नैप के साथ ड्रैग और ड्रॉप प्रोग्राम कैसे करें IOS प्लेटफ़ॉर्म के लिए उद्देश्य-सी में कुछ लागू करने के लिए देख रहा हूं।आईओएस

मैं दो जीयूआई वस्तुओं के लिए, चलो बस कहना है कि वे सादगी के लिए UIImages कर रहे हैं और वर्ग आकार हैं चाहता हूँ।

और फिर मैं एक "खाली" जीयूआई तत्व सिर्फ एक ही आकार के एक वर्ग के धूसर है कि है।

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

साथ ही मैं 2 अन्य वर्ग छवियों और एक ही बातचीत के साथ एक और खाली वर्ग इस तरह के लेकिन 2 छवियों में से प्रत्येक समूह और 1 रिक्त वर्ग के लिए एक दूसरे के बीच काम नहीं कर सकता चाहते हैं। यानी पहली दो छवियों को केवल पहले खाली वर्ग में ही छोड़ा जा सकता है।

मुझे लगता है कुछ बूंद घटना मैं कब्जा करने के लिए और फिर अगर छवि मेटा डेटा रिक्त वर्ग यह में गिरा दिया जा रहा है के साथ मेल खाता है का निर्धारण रहा हूँ वहाँ होगा।

आप किसी भी कोड नमूने के बारे में पता है या वहाँ से ऐप्स मैं निश्चित रूप से कोड के माध्यम से काम कर सकते हैं समझने के लिए या यदि आप उस के लिए मुझे बात करने के लिए कुछ वस्तुओं, घटनाओं और गुण होते हैं बहुत अच्छा होगा अगर।

इस ऐप के रूप में के रूप में ज्यादा एक खेल के लिए नहीं है तो मैं खेल इंजन में से किसी में काम करने के लिए नहीं करना चाहते लेकिन अगर एक आसान तरीका यह करने के लिए है तो मैं यह सब के लिए कर रहा हूँ।

उत्तर

13

आप इसे काफी आसानी से प्राप्त कर सकते हैं। छवि के लिए, आप UILongPressGestureRecognizer संलग्न करते हैं और क्रिया विधि में, आप उंगली आंदोलन के आधार पर छवि की स्थिति अपडेट करते हैं। - (CGPoint)locationInView:(UIView *) के साथ इशारा का वर्तमान स्थान प्राप्त करें। प्रत्येक आंदोलन पर, आप जांच सकते हैं कि छवि फ्रेम आपके लक्षित क्षेत्र के फ्रेम को ओवरलैप करता है और यदि ऐसा होता है, तो उसे जगह में स्नैप करें।

ओवरलैप के लिए जांच की जा रही काफी सरल (छवि को देखते हुए और लक्ष्य दोनों एक ही दृश्य पदानुक्रम का हिस्सा हैं) है:

CGRect imageRect = [image convertRect:image.frame toView:[image superview]]; 
CGRect targetRect = [target convertRect:target.frame toView:[image superview]]; 
if (CGRectIntersectsRect(imageRect, targetRect)) { 
    // overlap 
} 

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

फिर, उपयोगकर्ता छवि चला जाता है और यह outsize लक्ष्य है जब, आप इसे वापस ले जाने:

[UIView animateWithDuration:0.2 
       animations:^{ 
        image.center = originalCenter; 
        self.originalCenter = CGPointZero; 
        }]; 
+0

धन्यवाद पास्कल। मेरे पास कुछ अनुवर्ती प्रश्न हैं। यदि मैं केवल उस छेड़छाड़ कॉल करना चाहता हूं जब उपयोगकर्ता ड्रॉप करता है, तो मुझे किस अंतर को तुलना करना चाहिए? और क्या यह उस छवि में होगा जिसे मैं खींच रहा हूं या उस वर्ग में जिसमें मैं जा रहा हूं? और यदि उपयोगकर्ता मेरे खाली वर्ग के बाहर गिरता है, तो क्या कुछ प्रीमियर एनीमेशन है जिसे मैं छवि को बताने के लिए कह सकता हूं कि X.Y वापस जाने के लिए और एनीमेशन या गति गति का उपयोग करने के लिए क्या है? – user461051

+0

मुझे स्टैक ओवरफ़्लो पर कुछ और लेख मिले हैं जिनके बारे में मैं कुछ ढूंढ रहा हूं। मैं सोच रहा हूं कि क्या मैंने UIImage में स्पर्श किए गए तरीके को स्पर्श किया है और देखें कि उस स्पर्श का X.Y सही खाली वर्ग के CGRect में है या नहीं। फिर उस बिंदु पर छवि दृश्य के ऊपरी बाईं ओर X.Y को खाली वर्ग के ऊपरी बाईं ओर सेट करें।मुझे अभी भी छवि को मूल X.Y पर वापस जाने का सबसे अच्छा तरीका पता लगाने की आवश्यकता होगी। – user461051

+0

मैंने एक उदाहरण जोड़ा कि आप इसे वापस कैसे ले जा सकते हैं। क्या उससे मदद हुई? – Pascal

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

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