2012-10-09 9 views
5

मुझे आईओएस ऐप पर प्रतिक्रियाओं की प्रतिक्रियाकर्ता श्रृंखला के साथ परेशानी हो रही है।बच्चे के दृश्य के बाद टच इवेंट प्राप्त करने से पैरेंट व्यू को रोकें

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

समस्या तब होती है जब मैं एक बबल टैप करता हूं, दोनों विचार (बच्चे और अभिभावक) ट्रिगर कर रहे हैं, मैं इसे कैसे रोक सकता हूं?

यदि बच्चा पहले से ही टच इवेंट पर काम करता है तो क्या इसका अंत नहीं होना चाहिए?

मेरे बुलबुले UITapGestureRecognizer साथ इशारा नल पहचानने रहे हैं, जबकि माता-पिता को देखने (वर्ग) touchesBegan उपयोग करता है: विधि

यह ग्राफ कई बुलबुले के साथ अपने मौजूदा सेटअप बताते हैं:

enter image description here

कोड:

@implementation Bubble 
... 
-(id) initWithFrame: (CGRect) frame { 
    UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc] 
               initWithTarget:self action:@selector(handleSingleTap:)]; 
    singleFingerDTap.numberOfTapsRequired = 1; 
    [self addGestureRecognizer:singleFingerDTap]; 

} 

-(void) handleSingleTap { 
NSLog(@"Bubble tapped, show the view"); 
} 

स्क्वायर

के लिए
@implementation Square 
... 
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
NSLog(@"square touched, lets hide the view"); 
} 

एक नल के बाद मुझे सांत्वना

+0

कृपया शामिल –

+0

@ LithuT.V कोड नमूना शामिल! मुझे लगता है कि मैं इशारा पहचानकर्ता टैप का उपयोग करने के लिए स्क्वायर भी बदल सकता हूं, हालांकि क्या घटना को बुलबुले से अगले रेस्पॉन्डर में जाने से रोकने का कोई तरीका है ?? – perrohunter

उत्तर

3

मुझे पता चला कि समस्या क्या है। UIView UIResponder से विरासत में मिलता है, और मूल स्पर्श घटनाओं को इस दृष्टिकोण से पता चला है कि स्पर्शों को ट्रिगर करने से घटनाएं शुरू हुईं। मुख्य दृश्य में जो सबव्यूव्यू आपने जोड़े हैं, वे भी छूने के तरीके का जवाब देते हैं। बहुत बुनियादी बात है। आपने टैप जेस्चर पहचानकर्ता के साथ एक चयनकर्ता विधि भी जोड़ा है। इसलिए बुलबुले पर कोई भी स्पर्श दोनों तरीकों को ट्रिगर करता है और इसलिए दो लॉग।

की तरह एक और चयनकर्ता के साथ देखने के लिए एक और इशारा पहचानकर्ता जोड़ कर देखें,
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tappedOnBubble)]; 
    [self.bubbleView addGestureRecognizer:tap]; 

UITapGestureRecognizer *tap2 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tappedOnMainView)]; 
    [self.view addGestureRecognizer:tap2]; 


-(void)tappedOnMainView 
{ 
    NSLog(@"touched on main View"); 
    [self.vwToShow setHidden:NO]; 
} 
-(void)tappedOnView 
{ 
    NSLog(@"tapped on bubbleview"); 
    [self.vwToShow setHidden:YES]; 
} 
5

खैर पर दोनों NSLogs देखते हैं, कि समस्या है। touchesBegan इशारा पहचानकर्ता द्वारा उठाए गए सभी स्पर्शों को प्राप्त करेगा। आप gestureRecognizer.cancelsTouchesInView = TRUE सेट करने का प्रयास कर सकते हैं या अपने बुलबुले के लिए भी स्पर्श का उपयोग कर सकते हैं।

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

उम्मीद है कि इससे मदद मिलती है।

चीयर्स!

संपादित करें:

आप केवल इशारा recognizers का उपयोग कर रहे हैं, तो स्पर्श पदानुक्रम में अगले दृश्य करने के लिए नहीं भेजा जाएगा। मुझे लगता है कि यह वही है जो आप चाहते हैं। आप स्पर्श के साथ जाने का निर्णय करना शुरू किया, तो मुझे लगता है कि आप इस तरह से कुछ करना चाहिए:

// बुलबुला दृश्य कक्षा में

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event 
{ 
    if(theTouchLocation is inside your bubble) 
    { 
     do something with the touch 
    } 
    else 
    { 
     //send the touch to the next view in the hierarchy (your large view) 
     [super touchesBegan:touches withEvent:event]; 
     [[self nextResponder] touchesBegan:touches withEvent:event]; 
    } 
} 
+0

महान जवाब कोड – perrohunter

+0

पीएस: कोई गेम नहीं है: पी – perrohunter

1

यह करें:

@implementation Square{ 

... 
-(id) initWithFrame: (CGRect) frame { 
    UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc] 
               initWithTarget:self action:@selector(handleSingleTap:)]; 
    singleFingerDTap.numberOfTapsRequired = 1; 
    [self addGestureRecognizer:singleFingerDTap]; 

} 

-(void) handleSingleTap { 
    NSLog(@"Sqaure tapped, hide the view"); 
} 

} 
+0

वे बटन नहीं हैं :) वे कस्टम UIView के – perrohunter

0

एक नल का उपयोग क्यों नहीं मुख्य दृश्य पर इशारा पहचानकर्ता भी? टच शुरू हुआ है अपने खुद के इशारा पहचानने की तरह, लेकिन बहुत कठिन है। कई टैप पहचानकर्ताओं के साथ, केवल एक ही आग लग जाएगा।

+0

हैं क्या मुझे स्क्वायर पहचानकर्ता को बुलबुले या पीछे की ओर विफल होने की आवश्यकता है? – perrohunter

+1

@ PERR0_HUNTER कभी-कभी किसी और के लिए आपको बताने की प्रतीक्षा करने के बजाय इसे स्वयं ही कोशिश करना तेज़ होता है। –

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