2011-12-18 9 views
6

मैं (..) [UIView commitAnimations] का उपयोग करके बहुत सारे विचारों को एनिमेट करता हूं। अब मैं यह देखना चाहता हूं कि दृश्य, जिसे "शॉट" किया गया था, ने एक और दृश्य को छुआ है। क्या कोई इसे जानता है कि इसे कैसे कार्यान्वित किया जाए? शायद if(view.frame.origin.x==anotherview.frame.origin.x){ } ..उद्देश्य-सी: जांचें कि क्या दृश्य किसी अन्य दृश्य को छूता है

उत्तर

20

संकल्पनात्मक रूप से, एक दृश्य "स्पर्श" करता है यदि उनकी बाध्यता छेड़छाड़ करती है। (जिसका अर्थ है दोनों में शुरू

Boolean viewsOverlap = CGRectIntersectsRect(viewA.bounds, viewB.bounds); 

लेकिन वह अकेले काम नहीं करेगा क्योंकि विचारों का सीमांकन rects अपने स्वयं के समन्वय रिक्त स्थान में निर्दिष्ट कर रहे हैं: तो दो विचारों का सीमांकन rects तुलना करने के लिए, आप की तरह कुछ करना चाहता हूँ 0,0, आदि आदि) तो तुम भी इससे पहले कि आप उनकी तुलना एक आम समन्वय अंतरिक्ष के लिए rects को बदलने की जरूरत है:

CGRect boundsA = [viewA convertRect:viewA.bounds toView:nil]; 
CGRect boundsB = [viewB convertRect:viewB.bounds toView:nil]; 
Boolean viewsOverlap = CGRectIntersectsRect(boundsA, boundsB); 

वहाँ से, आप यह पता लगाने की की अपनी सूची के माध्यम से कुशलता से पुनरावृति करने के लिए कैसे में सक्षम होना चाहिए विचार-आप-देखभाल-यह निर्धारित करने के बारे में कि कोई ओवरलैप है या नहीं।

+1

+1 अच्छी तरह से समझाया – Till

4

वैकल्पिक रूप से आप सिर्फ फ्रेम तुलना कर सकते हैं अगर वे एक ही superview में कर रहे हैं:

BOOL methodB = CGRectIntersectsRect(viewA.frame, viewB.frame); 
+0

यह पूरी तरह से काम करता है! – Bobby

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