2012-09-09 13 views
5

परियोजना में, एक UIView MyView कर रहे हैं और एक UIImageView myImage MyView, विचारों पदानुक्रम behinds:एक UIImageview में इशारा पहचानकर्ता कैसे जोड़ें?

UIWindow
| - UIImageView (myImage)
| - UIView (MyView) [पूरे स्क्रीन]

फिर ViewController

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; 
     tapGesture.numberOfTapsRequired = 1; 
     [myImage addGestureRecognizer:tapGesture]; 

में myImage करने के लिए एक इशारा पहचानकर्ता जोड़ा लेकिन इशारा myImage को प्रभावित नहीं करता, myImage setUserInteractionEnabled:YES है। यह केवल तभी प्रभावित होगा जब मेरी छवि मेरे दृश्य के सामने रखी जाए, मैं इस समस्या को कैसे हल कर सकता हूं?

+0

यदि यह एक दृश्य के पीछे है तो इसे स्पर्श नहीं मिलेगा। – ohr

उत्तर

11

आपकी UIView स्पष्ट रूप से UIImageView तक पहुंचने से पहले छूने को रोकता है।

आप UIView पर अपने UIView के सामने, या अक्षम उपयोगकर्ता बातचीत में अपने UIImageView प्रदर्शित कर सकते हैं तो यह छूता रोकना नहीं है।

आप अपने स्पर्श घटनाओं को पकड़ने पर बेहतर अनाज की जरूरत है, आप या तो कर सकते हैं:

  • UIImageView के शीर्ष पर अपने UIView डाल अगर यह डिजाइन प्रयोजनों के लिए करने के लिए (अगर यह मास्क UIImageView उदाहरण के लिए एक सा) लेकिन यह घटनाओं पकड़ नहीं कर (userInteractionEnabled = NO), और UIImageView नीचे एक भिन्न UIView का उपयोग वास्तव में UIImageView
  • बाहर की घटनाओं को पकड़ने के लिए UIImageView के शीर्ष पर अपने UIView रखने के लिए और यह घटनाओं को पकड़ने रखना (userInteractionEnabled = YES), लेकिन अपने UIView को उपclass करके और pointInside:withEvent: या hitTest:withEvent: विधि को ओवरराइड करके, इसके माध्यम से गुजरने वाली घटनाओं को फ़िल्टर करें।
अधिक जानकारी तुम सच में the dedicated Apple Programming Guide related to Event Handling पढ़ना चाहिए लिए

+0

लेकिन मेरे इमेज को मेरे व्यू के पीछे रहना है, क्या कोई तरीका है कि मैं स्पर्श शुरू करते समय एक पहचान कर सकता हूं और यह निर्धारित करने के लिए कि कौन सा दृश्य प्रभावित होगा? – pqteru

+0

हां। जैसा कि मैंने अपने उत्तर में कहा है, UIView पर उपयोगकर्ता इंटरैक्शन बंद करें ('userInteractionEnabled = NO')। यदि 'UIView' को अभी भी 'UIImageView' कहां है, सिवाय इसके कि कहीं भी स्पर्श ईवेंट को कैप्चर करने की आवश्यकता है, तो आपके पास कई संभावनाएं हैं: (1)' UIImageView' के शीर्ष पर अपना 'UIView' बनाएं लेकिन' userInteractionEnabled = NO' 'के साथ रखें 'UIImageView' के नीचे एक और 'UIView'' जो 'UIImageView' या (2) द्वारा कैप्चर नहीं किए गए प्रत्येक स्पर्श ईवेंट को कैप्चर करता है,' UIImageView' के शीर्ष पर' UIView' डालता है, इसे उप-वर्गीकृत करता है और 'हिटटेस्ट ओवरराइड करता है: withEvent: 'या' pointInside: withEvent: 'UIView विधियों – AliSoftware

1

मेरी कोड:

UILongPressGestureRecognizer *press = [[UILongPressGestureRecognizer alloc] 
initWithTarget:self action:@selector(hasLongPressed)]; 
[press setMinimumPressDuration:0.1f]; //1ms 
press.delegate = (id)self; 
[self.DGEMLogo addGestureRecognizer:press]; 

दो गुण

1.) करने के लिए अपने UIImageView (self.DGEMLogo) [self.DGEMLogo addGestureRecognizer: प्रेस] को GestureRecognizer जोड़ने आवश्यक हैं;

2.) अपने UIImage संपत्ति इंटरेक्शन सही

thats सब करने के लिए सक्षम निर्धारित किया है।

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