2010-06-20 13 views
8

मेरे ऐप में मैंने 3.2 जेडीयूआर रिकॉग्नाइज़र जोड़े हैं जो 3.2 एसडीके में उपलब्ध हैं। सब कुछ ठीक से काम कर रहा प्रतीत होता है और स्क्रीन पर प्रतिक्रिया समय बहुत तेज रहा है। लेकिन किसी कारण से जब मैं अपने कुछ संकेतों में requireGestureRecognizerToFail जोड़ता हूं, तो इशारा ट्रिगर होने पर बहुत ही देर हो सकती है। नीचे कोड का एक स्निपेट है जिसका उपयोग मैं इशारा रिकॉग्नाइज़र बनाने के लिए करता हूं। क्या किसी को पता है कि देरी क्यों है और मैं इसे कैसे ठीक कर सकता हूं? SingleTap इशारा करने से रोकने के लिए requireGestureRecognizerToFail का उपयोग कर रहा हूं जब उपयोगकर्ता DoubleTap करता है।आईपैड जेस्चर रिकग्नाइज़र - देरी प्रतिक्रिया

- (void)createGestureRecognizers { 

//Single Finger Double-Tap 
UITapGestureRecognizer *singleFingerDTap = [[UITapGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handleSingleDoubleTap:)]; 
    singleFingerDTap.numberOfTapsRequired = 2; 
    [super addGestureRecognizer:singleFingerDTap]; 

//Single Finger Tap 
UITapGestureRecognizer *singleFingerTap = [[UITapGestureRecognizer alloc] 
       initWithTarget:self action:@selector(handleSingleTap:)]; 
    singleFingerTap.numberOfTapsRequired = 1; 
[singleFingerTap requireGestureRecognizerToFail:singleFingerDTap]; 
[self addGestureRecognizer:singleFingerTap]; 

//Two Finger Pan 
UIPanGestureRecognizer *panGesture2 = [[UIPanGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handlePanGesture2:)]; 
    panGesture2.maximumNumberOfTouches = 2; 
[super addGestureRecognizer:panGesture2]; 

//Single Finger Pan 
UIPanGestureRecognizer *panGesture1 = [[UIPanGestureRecognizer alloc] 
      initWithTarget:self action:@selector(handlePanGesture1:)]; 
    panGesture1.maximumNumberOfTouches = 1; 
[panGesture1 requireGestureRecognizerToFail:panGesture2]; 
[super addGestureRecognizer:panGesture1]; 

[singleFingerDTap release]; 
[singleFingerTap release]; 
    [panGesture1 release]; 
[panGesture2 release]; 
} 
+0

क्या यह अपेक्षित व्यवहार नहीं है? यदि आप इसे तब तक क्रिया में देरी करने के लिए कहते हैं जब तक कि कोई अन्य इशारा विफल न हो जाए, तब तक यह खत्म नहीं हो जाता है। और दो नलियां उनके बीच एक समय अवधि होती हैं (नलियां = स्पर्श), इसलिए आपको इस समय की अवधि की आवश्यकता होती है। – Eiko

+0

धन्यवाद, यह सही समझ में आता है! – Maddoxx

उत्तर

6

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

उदाहरण के लिए, यदि आपके पास एक ही टैप चेंज पेज और डबल टैप ज़ूम है, तो आपको सिंगल टैप पर एक पेज बदलना होगा, फिर एनीमेशन को उलट दें और दूसरी टैप का पता लगाने के बजाय ज़ूम करें। तब तक एक ही टैप को संभालने वाला दृश्य स्थानांतरित हो सकता है। ज्यादातर मामलों में, यह अधिक परेशानी और भ्रम है तो यह लायक है।

+1

अब जब मैंने जो कहा है उसके बारे में सोचता हूं, तो यह सही समझ में आता है कि देरी हो रही है। चूंकि मुझे एक और रीयलटाइम प्रतिक्रिया की आवश्यकता है, इसलिए मुझे टच इवेंट्स को संभालने के लिए वापस जाना होगा। धन्यवाद! – Maddoxx