2012-03-15 17 views
6

दोस्तों,दो UILongPressGestureRecognizer, एक आग सकता है, अन्य

मैं दो UILongPressGestureRecognizer जोड़ लिया है नहीं कर सकते। मुझे क्या चाहिए जब 0.3 बटन के लिए दो बटन दबाए जाएं, "शॉर्टप्रेस हैंडलर" को फायर करें। यदि उपयोगकर्ता इन दो बटनों को एक और 1.2 सेकंड के लिए दबाता रहता है, तो "longPressHandler" को आग लगाना। अब मुझे केवल लघु प्रेसहैंडलर निकाल दिया गया है और लम्बेप्रेस हैंडलर को कभी नहीं निकाल दिया गया था। मुझे लगता है कि ऐसा इसलिए हो सकता है क्योंकि ShortPressGesture को पहले और लंबे समय तक पहचाना जाता है, प्रेस कभी भी मौका नहीं मिलता है। क्या कोई मुझे दिखा सकता है कि मैं क्या हासिल करना चाहता हूं? अग्रिम में धन्यवाद।

UILongPressGestureRecognizer *longPressGesture =[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressHandler:)] autorelease]; 
longPressGesture.numberOfTouchesRequired = 2; 
longPressGesture.minimumPressDuration = 1.5; 
longPressGesture.allowableMovement = 10; 
longPressGesture.cancelsTouchesInView = NO; 
longPressGesture.enabled = true; 
[self.view addGestureRecognizer:longPressGesture]; 

UILongPressGestureRecognizer *shortPressGesture =[[[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(shortPressHandler:)] autorelease]; 
shortPressGesture.numberOfTouchesRequired = 2; 
shortPressGesture.minimumPressDuration = 0.3; 
shortPressGesture.allowableMovement = 10; 
shortPressGesture.cancelsTouchesInView = NO; 
shortPressGesture.enabled = true; 
[self.view addGestureRecognizer:shortPressGesture]; 
+0

धन्यवाद। क्या आपको पता है कि अगर बटन भी जारी नहीं किया जाता है तो भी मुझे शॉर्टगेशर आग लगाना चाहिए? – Globalhawk

+0

क्षमा करें, मुझे यह संदेश नहीं मिला - अगर आप इसे अपनी पोस्ट के तहत लिखते हैं तो आपको इसे '@name ...' से संबोधित करना होगा यदि मैं आपको सही समझता हूं तो आपको कुछ चाहिए: उपयोगकर्ता प्रेस, 0.3 के बाद शॉर्टप्रेस निकाल दिया जाता है और अगर वह अपनी प्रेस जारी नहीं करता है तो 1.2 प्रेस के बाद लम्बाई निकाल दी जाती है। क्या वो सही है? –

+0

@rokjarc यह वही है जो मैं चाहता हूं। धन्यवाद। – Globalhawk

उत्तर

6

shortPressGesture जोड़ने से पहले इस लाइन सम्मिलित करें:

[shortPressGesture requireGestureRecognizerToFail:longPressGesture]; 

नोट: shortGesture जोत के 0.3 के तुरंत बाद सेकंड बुलाया नहीं किया जाएगा, लेकिन जब नल अगर यह 0.3 सेकंड और 1.2 सेकंड लंबा के बीच था जारी किया गया है । यदि टैप 1.2 से अधिक लंबा है (आपके कोड में 1.5s है जो शायद एक टाइपो है) केवल longPressGesture आग लग जाएगी।

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

हालांकि, अगर आप आग करने के लिए अपने ईवेंट हैंडलर्स दोनों चाहते हैं (लंबी प्रेस की एक घटना में), तो आप इस करना चाहिए:

आपका UIView की .h में <UIGestureRecognizerDelegate> फ़ाइल को लागू करना चाहिए।

.m फ़ाइल में आप इस पद्धति जोड़ें: लाइन जोड़ने की बजाय

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 

    return YES; 
} 

अब :

shortPressGesture.delegate = self; 
longPressGesture.delegate = self; 

नोट:

[shortPressGesture requireGestureRecognizerToFail:longPressGesture]; 

आप इस दो पंक्तियां जोड़ें: यदि आपके पास कोई अन्य UIGestureRecognisers लिंक है डी UIVIew पर आपको shouldRecognizeSimultaneouslyWithGestureRecognizer: में कुछ जांच जोड़नी होगी, अन्यथा आप YES वापस कर सकते हैं।

+0

यह एक आकर्षण की तरह काम करता है! आपका बहुत बहुत धन्यवाद! :-) – Globalhawk

+0

@ ग्लोबलहोक: आपका स्वागत है :) –

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