2012-09-05 19 views
8

कहें कि मैं वर्तमान में एक ड्रैग इशारा ट्रैक कर रहा हूं। मेरे इवेंट हैंडलर में मैं यह निर्धारित करने के लिए थ्रेसहोल्ड का उपयोग करता हूं कि ड्रैग एक क्रिया में कब होता है। जब दहलीज पार हो जाती है, तो मैं यह इंगित करना चाहता हूं कि ड्रैग इशारा पूरा हो गया है।मैं UIGestureRecognizer को प्रोग्रामेटिक रूप से समाप्त/रीसेट कैसे करूं?

आप को यह संपत्ति नहीं है, जबकि एक इशारा पहचानकर्ता वर्तमान में एक इशारा पहचानना है बदलते हैं, तो को इशारा पहचानकर्ता संक्रमण एक रद्द किया गया:

केवल एक चीज मैं डॉक्स में पा सकते हैं इस लाइन here है राज्य।

तो:

if (translation.y > 100) { 
    // do action 
    [self doAction]; 

    //end recognizer 
    sender.enabled = NO; 
    sender.enabled = YES; 
} 

यह काम करता है लेकिन ऐसा लगता है वहाँ एक neater तरीका हो सकता है।

क्या किसी को संकेत देने के लिए किसी अन्य तरीके से पता है कि एक इशारा प्रोग्रामेटिक रूप से समाप्त हो गया है? मैं -end: विधि की तरह कुछ उम्मीद करूंगा जो राज्य UIGestureRecognizerStateEnded के साथ अंतिम घटना उत्पन्न करता है।

+0

आप वर्णन कर सकते कि तुम क्या खींचें भाव के साथ कर रहे हैं? क्या आप वास्तव में कुछ खींच रहे हैं? –

+0

हाय फ़ैबियो, हां, मैं क्षैतिज-ड्रैगिंग एक आभासी पुस्तक का एक पृष्ठ कहता हूं, जब थ्रेसहोल्ड पास हो जाता है, तो मैं एनीमेशन को एक पृष्ठ को फ़्लिप करने के लिए शुरू करता हूं और फिर समय-समय पर ड्रैग जेस्चर को समाप्त करना चाहता हूं ताकि राज्य UIGestureRecognizerStateEnded वाला कोई ईवेंट हो जेनरेट, इस इशारे के नियमित अंत से जुड़े सभी कार्यों को संभालने। – Mattijs

उत्तर

7

क्या आपने एक कस्टम UIGestureRecognizer परिभाषित किया है? यदि आप जिस इशारा को पहचान रहे हैं वह ऐप्पल द्वारा परिभाषित मानक से अलग है क्योंकि इसकी एक अलग सीमा है या अन्यथा नियमित UIPanGestureRecognizer के समान नहीं है, तो यह आपके स्वयं के UIGestureRecognizer को बनाने का अर्थ हो सकता है। (see subclassing notes)

आप UIGestureRecognizer subclassed है, तो आप बस इस तरह राज्य सेट कर सकते हैं: withEvent:: विधि

self.state = UIGestureRecognizerStateEnded; 

आप शायद touchesMoved में ऐसा करना चाहते हैं। यह भी ध्यान दें:

"UIGestureRecognizer के उप-वर्गों को UIGestureRecognizerSubclass.h आयात करना होगा। इस हेडर फ़ाइल में राज्य का पुनर्विक्रय होता है जो इसे पढ़ने-लिखने देता है।"

दूसरी ओर, यदि आप केवल एक UIGestureRecognizerDelegate लागू कर रहे हैं, राज्य केवल पढ़ने के लिए, और वहाँ कोई रास्ता नहीं इसे सीधे सेट करने के लिए है। उस स्थिति में अक्षम करने/सक्षम करने की आपकी विधि सबसे अच्छी हो सकती है जो आप कर सकते हैं।

+0

सबक्लासिंग एक साफ कार्यान्वयन करने के लिए यहां जवाब है। मैंने इस तरह से इस बारे में नहीं सोचा था। धन्यवाद! – Mattijs

3

आपके द्वारा दिखाए गए कोड के साथ आपको इशारा शुरू करने के लिए तर्क होना आवश्यक है जब इशारा पहचानकर्ता रद्द कर दिया गया है और मैं कहूंगा कि यह अच्छा नहीं है क्योंकि इस इशारा पहचानकर्ता को रद्द किए बिना अन्य तरीकों से रद्द किया जा सकता है एनीमेशन किया है।

आप को ध्यान में रखते एनीमेशन तुम सिर्फ जब सीमा पारित हो जाता है और जब इशारा सामान्य रूप से समाप्त हो जाती है इस विधि कॉल करने की आवश्यकता शुरू करने के लिए एक विधि है। फिर दो अलग-अलग अवसर। कोड आप प्रस्तुत इस प्रकार दिखाई देगा:

if (translation.y > 100) { 
    // do action 
    [self finishFlip]; 
    sender.enabled = NO; 
    sender.enabled = YES; 
} 

रद्द कर रहा है इशारा यहाँ भी उपयोगी हो सकता है उपयोगकर्ता अपनी उंगली खींच रखता है कि अगर किसी भी निम्न क्रियाओं को रोकता है।

आप एक टीम इस पर विकसित करने और आप तो होना ही आप इशारा पहचानकर्ता उपवर्ग चाहिए के रूप में nont सुझाव दिया एक विशिष्ट घटना की जरूरत है तो।