2012-10-24 6 views
7

आश्चर्य है कि जब मैं setCancelsTouchesInView को कॉल करता हूं तो वास्तव में क्या होता है। यह आधिकारिक दस्तावेज में शामिल नहीं है http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.htmlकॉल सेट कैंसल्स टच इनव्यू के दौरान वास्तव में क्या होता है?

धन्यवाद

उत्तर

29

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

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesBegan"); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesMoved"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesEnded"); 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesCancelled"); 
} 

- (IBAction)panGestureRecognizerDidUpdate:(UIPanGestureRecognizer *)sender { 
    NSLog(@"panGesture"); 
} 

और निश्चित रूप से पैन इशारा पहचानकर्ता panGestureRecognizerDidUpdate: भेजने के लिए कॉन्फ़िगर किया गया है संदेश।

अब मान लीजिए कि आप दृश्य को स्पर्श करते हैं, पैन इशारा के लिए अपनी उंगली को पर्याप्त रूप से ले जाएं, और फिर अपनी उंगली उठाएं। ऐप प्रिंट क्या करता है?

इशारा पहचानकर्ता YES करने के लिए cancelsTouchesInView सेट है, तो एप्लिकेशन इन संदेशों को लॉग इन करेंगे:

touchesBegan 
touchesMoved 
touchesCancelled 
panGesture 
panGesture 
(etc.) 

आप से पहले रद्द एक से अधिक touchesMoved मिल सकता है।

इसलिए, यदि आप cancelsTouchesInViewYES (डिफ़ॉल्ट) करने के लिए सेट, प्रणाली स्पर्श से पहले ही इशारा पहचानकर्ता से पहले संदेश भेजता रद्द हो जाएगा, और आप उस स्पर्श के लिए किसी भी अधिक स्पर्श संबंधित संदेश प्राप्त नहीं होगा।

इशारा पहचानकर्ता cancelsTouchesInView सेट NO को, एप्लिकेशन इन संदेशों को लॉग इन करेंगे तो:

touchesBegan 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
(etc.) 
panGesture 
touchesEnded 

तो, आप निर्धारित करते हैं cancelsTouchesInViewNO करने के लिए, सिस्टम के लिए स्पर्श संबंधित संदेश भेजने के लिए जारी रहेगा इशारा स्पर्श, इशारा पहचानकर्ता के संदेशों के साथ interleaved। स्पर्श रद्द होने की बजाय सामान्य रूप से समाप्त हो जाएगा (जब तक कि सिस्टम किसी अन्य कारण के स्पर्श को रद्द नहीं करता है, जैसे स्पर्श के दौरान होम बटन दबाया जाता है)।

+0

धन्यवाद! जब आप cancelsTouchesInView को नहीं सेट करते हैं, तो ईवेंट सही पॉपिंग रद्द कर दिया जाएगा? – jebberwocky

+1

मुझे समझ में नहीं आता कि "पॉपिंग रद्द करें" का अर्थ क्या है। –

3

सेब डेवलपर पोर्टल link से:

cancelsTouchesInView - एक इशारा पहचानकर्ता अपने हाव-भाव, को पहचान लेता है इसके बारे में शेष छूता unbinds उनके दृश्य से इशारा (इसलिए विंडो उन्हें वितरित नहीं करेगा)। खिड़की पहले डिस्प्ले स्पर्श को रद्द कर देती है (स्पर्श किए गए: withEvent :) संदेश। यदि इशारा पहचानकर्ता अपने इशारे को नहीं पहचानता है, तो दृश्य को मल्टी-टच अनुक्रम में सभी स्पर्शों को प्राप्त होता है।

cancelsTouchesInView:

एक बूलियन मान को प्रभावित करने के लिए कि क्या छूता एक दृश्य के लिए दिया जाता है जब एक इशारा मान्यता प्राप्त है।

@property (nonatomic) BOOL cancelsTouchesInView

चर्चा

जब यह संपत्ति हाँ (डिफ़ॉल्ट) है और रिसीवर अपने हाव-भाव, कि इशारा के स्पर्श कि लंबित हैं पहचानता पर वितरित नहीं किए गए हैं और पहले वितरित स्पर्श स्पर्शों के माध्यम से रद्द कर दिए गए हैं: साथ: संदेश को दृश्य में भेजा गया है। यदि एक इशारा पहचानकर्ता अपने इशारे को नहीं पहचानता है या यदि इस संपत्ति का मान नहीं है, तो दृश्य बहु स्पर्श अनुक्रम में सभी स्पर्श प्राप्त करता है।

+0

"उस इशारे के स्पर्श जो पेंडिंग कर रहे हैं .." से क्या सलाह है? –