2010-04-28 19 views
8

कहा जा रहा है यदि मैं अपनी उंगली को पहले स्पर्श से ऊपर उठाता हूं, तो यह अगले स्पर्श को ठीक से पहचान लेगा। यह केवल तब होता है जब मैं लगातार अपना पहला स्पर्श पकड़ता हूं और फिर एक ही समय में एक अलग उंगली के साथ एक अलग क्षेत्र को स्पर्श करने और स्पर्श करने के लिए प्रयास करता हूं। फिर वह उस दूसरे स्पर्श को फिर से पहले स्पर्श से गलत तरीके से पंजीकृत कर देगा।स्पर्शों को बुलाया नहीं जा रहा ??? या यादृच्छिक रूप से

अद्यतन यह जब तक बहुत अंतिम स्पर्श समाप्त हो गया है touchesEnded नहीं बुलाया जा रहा है के साथ कुछ है (यह परवाह नहीं करता है, तो आप पहले से ही 5 अन्य छूता खत्म इससे पहले कि आप अंत में पिछले एक जाने के लिए किया था ... यह एक बार बहुत अंतिम स्पर्श समाप्त होता है समाप्त करने के लिए)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

UITouch* touch = [touches anyObject]; 

NSString* filename = [listOfStuff objectAtIndex:[touch view].tag]; 

// do something with the filename now 

} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

ITouch* touch = [touches anyObject]; 
NSString* buttonPressed = [listOfStuff objectAtIndex:[touch view].tag]; 

// do something with this info now 
} 
+1

मैंने एक साधारण परीक्षण प्रोजेक्ट बनाया और ऐसा लगता है कि छूता है हर बार किसी भी उंगली को उठाया जाता है ... – Vladimir

+0

व्लादिमीर, क्या आप कहीं भी अपना कोड उदाहरण पोस्ट करना चाहते हैं ताकि मैं देख सकूं कि अलग क्या है? किसी भी कारण से, मेरे सभी स्पर्शों को बाद में एक ही समय में सभी को बुलाया जा रहा है, जब वे वास्तव में – iwasrobbed

+0

होते हैं, वैसे, मेरे कार्यक्रम में स्पर्श UIImageViews पर हैं जो स्क्रॉलव्यू के भीतर हैं और यह सब UIView के भीतर है अगर इससे कोई फर्क पड़ता है – iwasrobbed

उत्तर

7

किसी भी कारण से, स्पर्शों को केवल तभी देखा जा रहा है जब स्पर्श स्क्रॉलव्यू के भीतर होता है। यदि आप या तो ए) स्क्रॉलिंग से स्क्रॉलव्यू अक्षम करें; या बी) स्क्रॉलव्यू का उपयोग न करें, फिर स्पर्श करें तुरंत वितरित हो जाता है।

मैंने सुना है कि कुछ लोगों ने sendEvent को अवरुद्ध कर दिया है, लेकिन यह मुझे स्केची लगता है और मैं वास्तव में प्रतिक्रियाकर्ता श्रृंखला को पेंच नहीं करना चाहता क्योंकि SendEvent एक बहुत सारी घटनाओं को संभालता है।

कोई अतिरिक्त विचार? क्या किसी ने कभी भी यूआईविंडो को इस तरह के स्पर्शों को रोकने और रोकने के लिए उपclassed है? कोई भी इनपुट जो आप प्रदान कर सकते हैं उसकी सराहना की जाती है।

0

सेट multipleTouchEnabled उन सब को कहता है।

इंटरफ़ेस बिल्डर में, यह "उपयोगकर्ता इंटरैक्शन सक्षम" के अंतर्गत "एकाधिक स्पर्श" चेकबॉक्स है।

+0

tewha, आप यहां सही रास्ते पर हो सकते हैं ... मैं कोड में UIImageViews बना रहा हूं और उस सेटअप के दौरान एकाधिक टचएनेबल सेट कर रहा हूं। किसी कारण से, मुझे यकीन नहीं है कि यह ठीक से सेट हो रहा है।मैंने कहीं और पढ़ा है कि यदि एकाधिक टचएनेबल YES पर सेट नहीं है, तो स्पर्श किया जाएगा जब तक कि आखिरी स्पर्श समाप्त नहीं हो जाता है (जो मेरी त्रुटि से मेल खाता है!)। – iwasrobbed

+0

कभी नहीं, बस जांचें कि सभी सक्षम हैं और सुनिश्चित हैं कि एकाधिक एकाधिक टचएनेबल सभी के लिए हाँ है :( क्या सभी यूआईएममेज व्यू स्क्रॉलव्यू के भीतर होने के साथ कुछ करने के लिए हो सकता है? स्क्रॉलव्यू के बाहर वे ठीक करते हैं, लेकिन स्क्रॉलव्यू के भीतर वे डॉन करते हैं तुरंत संदेश नहीं भेजो। – iwasrobbed

6

स्क्रॉलव्यू में एक संपत्ति delaysContentTouches है जो डिफ़ॉल्ट रूप से YES पर सेट है। जब तक यह एक स्क्रॉलिंग इशारा निर्धारित नहीं करता है तब तक यह सभी स्पर्श घटनाओं में देरी करेगा।

4

मुझे पता है कि यह प्रश्न थोड़ा पुराना है, लेकिन मैंने सोचा कि मैं अपने अनुभव को किसी ऐसे व्यक्ति के लिए साझा करूंगा जो इस धागे में ठोकर खाए, जैसा कि मेरे पास है।

मैं कुछ घंटों के लिए इस समस्या से जूझ रहा हूं और एकमात्र समाधान जो मैं आ सकता हूं, UIGestureRecognizer ऑब्जेक्ट्स का उपयोग कर रहा था।

मेरे सेटअप के लिए मैं पैन का उपयोग कर रहा था और उन संकेतों को पकड़ने के लिए पहचानकर्ताओं को टैप कर रहा था, और स्पर्श का उपयोग करके बीज और स्पर्श किसी भी मानक स्पर्श घटनाओं के लिए समाप्त हो गया। यह तब तक नहीं था जब तक मैंने UIGestureRecognizer ऑब्जेक्ट्स को हटाया नहीं था, स्पर्श छूने वाला तरीका दूसरे स्पर्श के अंत में फिर से कॉल करना शुरू कर दिया। विशेष रूप से यह पैन पहचानकर्ता था जो मुद्दों का कारण बन रहा था।

मुझे पूरी तरह से यकीन नहीं है कि यह इस मामले में लागू होता है लेकिन यह मेरे द्वारा किए गए मुद्दों को हल करता है।

9

मेरे पास आज था, (या बल्कि मुझे यह समस्या आज मुझ पर डंप कर दी गई थी!)।

क्या मैं हो रहा देखा:

  • टच स्क्रीन फिंगर के साथ 1
  • touchesBegan आग
  • टच स्क्रीन फिंगर के साथ 2
  • touchesBegan आग
  • रिलीज फिंगर 2
  • कुछ नहीं होता
  • रिलीज फिंगर 1
  • touchesEnded आग
  • आग

touchesEnded के रूप में गेविन क्लिफ्टन ने कहा, यह केवल यदि आप एक इशारा पहचानकर्ता जोड़ने होता है। एक पहचानकर्ता के बिना, प्रत्येक उंगली जारी होने के बाद छेड़छाड़ की आग लगती है। अगर मुझे पहचानकर्ताओं का उपयोग करने की आवश्यकता नहीं है तो कौन अच्छा होगा ... !!!

मैंने जोड़कर इसे हल किया है gestureRotation.delaysTouchesEnded = FALSE; मेरी पहचानकर्ता निर्माण/जोड़ने कोड को:

gestureRotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRotation_Callback:)]; 

[gestureRotation setDelegate:self]; 
gestureRotation.cancelsTouchesInView = FALSE; 
gestureRotation.delaysTouchesEnded = FALSE;  // <---- this line!! 
[self.view addGestureRecognizer: gestureRotation]; 
[gestureRotation release]; 

अब इशारों काम करते हैं, और touchesBegan अब कतारों!

0

मुझे बस यह समस्या थी, जहां touchesEnded को स्क्रॉलव्यू के भीतर किसी बटन पर कभी नहीं कहा जाएगा। ओविडिउ के उत्तर के आधार पर, मैंने पाया कि मैन्युअल रूप से मेरे स्क्रॉलव्यू के ContentOffset को समस्या का कारण बन रहा था। संभावित रूप से सामग्री होने के कारण ऑफसेट ने जिस तरह से यह स्क्रॉलव्यू को भ्रमित कर रहा था, उस पर सेट किया था कि क्या मैं बटन दबाकर या दृश्य को स्क्रॉल करने का प्रयास कर रहा था।

ऑफसेट को 0,0 पर रहने दें जिससे समस्या दूर हो गई।

0

मुझे एक और विकल्प मिला।

touchesBegan और CGPointtouchesMoved के अनुसार नहीं ले जाया गया, touchesCancelled के बाद कहा जाता है।

हालांकि, touchesMoved, touchesEnded के अनुसार बदला गया।

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