मुझे UIViewController के स्पर्श/गति/समाप्ति विधियों के स्पर्श के माध्यम से एक से अधिक स्पर्शों को संभालने में कोई समस्या है। मैं एक cocos2d ऐप (ccTouchesBegan/Moved/Ended का उपयोग करके) में एक ही व्यवहार देख रहा हूं, इसलिए मुझे लगता है कि यह प्रश्न आईओएस में सभी स्पर्श हैंडलिंग पर लागू किया जा सकता है। मैंने कोड को नीचे रखा है, जिसके बाद मैं देख रहा हूं।UIViewController क्यों छूता है बेगन, स्पर्श करता है और स्पर्श स्पर्श केवल तभी बुलाया जाता है जब दो स्पर्शों में से पहला शुरू होता है, चलता है या समाप्त होता है?
सभी विधियों को UIViewController उपclass पर लागू किया गया है।
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Touches Began");
[self logTouchesFor: event];
[super touchesEnded: touches withEvent: event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Touches Moved");
[self logTouchesFor: event];
[super touchesEnded: touches withEvent: event];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"Touches Ended");
[self logTouchesFor: event];
[super touchesEnded: touches withEvent: event];
}
-(void)logTouchesFor:(UIEvent *)event
{
int count = 1;
for (UITouch *touch in event.allTouches)
{
CGPoint location = [touch locationInView: self.view];
NSLog(@"%d: (%.0f, %.0f)", count, location.x, location.y);
count++;
}
}
अब दिलचस्प परिणाम के लिए
...
एकल छूता काम के रूप में उम्मीद की
चलो कहते हैं कि मैं अपने अंगूठे के साथ स्क्रीन को छूने करते हैं। मैं आउटपुट विंडो में देखता हूं जो स्पर्श करता है बेगन को अपेक्षित कहा जाता है। मैं अपने अंगूठे को चारों ओर घुमाता हूं और छूता हूं। तब मैं स्क्रीन से अपने अंगूठे को उठाता हूं और स्पर्श करता हूं। यह सब अपेक्षित है, मैं इसे प्रश्न में एक नियंत्रण मामले के रूप में शामिल कर रहा हूं - बस यह स्पष्ट करने के लिए कि मेरा व्यू कंट्रोलर स्पर्श कार्यक्रम प्राप्त कर रहा है और मुझे कहीं भी vc.view.userInteractionEnabled = YES
याद नहीं आया है।
दूसरा टच का कारण नहीं है touchesBegan, touchesMoved या touchesEnded
के नाम से जाना यह सबसे दिलचस्प एक है। मान लीजिए कि मैं अपने अंगूठे के साथ स्क्रीन को छूता हूं (स्पर्शों को बुलाया जाता है) और इसे स्क्रीन पर अभी भी पकड़ो। फिर मैं अपनी अंगूठी की अंगूठी के साथ स्क्रीन पर कहीं और स्पर्श करता हूं, जबकि मेरे अंगूठे को एक ही स्थान पर रखते हुए। टच बेगन को बुलाया नहीं जाता है। तो मान लीजिए कि मैं अपनी अंगूठी को पूरी तरह से रखते हुए अपनी इंडेक्स उंगली ले जाता हूं (यह मुश्किल हो सकता है लेकिन यह संभव है)। Touches हटाया नहीं जाता है। फिर, मैं स्क्रीन से अपनी इंडेक्स उंगली उठाता हूं। TouchesEnded नहीं कहा जाता है। आखिरकार, मैं अपना अंगूठा और छूता चलाता हूं जिसे बुलाया जाता है। तब मैं स्क्रीन से अपने अंगूठे उठाता हूं और स्पर्श करता हूं।
बस स्पष्ट होने के लिए: मैंने विधि में self.view.multipleTouchEnabled = YES
सेट किया है।
सूचना के बारे में दूसरा टच उपलब्ध है, सबसे पहले टच चालें
इस बार मैं बहुत ठीक उसके ऊपर उदाहरण की तरह कुछ करना प्रदान करना। मैं अपने अंगूठे के साथ स्क्रीन को छूता हूं, फिर भी मेरे अंगूठे को रखकर इंडेक्स उंगली करता हूं। टच्सबेगन को तब कहा जाता है जब मेरा अंगूठे स्क्रीन हिट करता है, लेकिन मेरी इंडेक्स उंगली नहीं। अब मैं अपना अंगूठा ले जाता हूं, और छूता हूं जिसे बुलाया जाता है। इतना ही नहीं, लेकिन घटना में दो स्पर्श हैं। सभी टच एरे (और हाँ, दूसरा स्पर्श वह है जहां मैं उम्मीद करता हूं)। इसका मतलब है कि सिस्टम को पता है कि मैंने दूसरी बार स्क्रीन को छुआ है, लेकिन मुझे अपने व्यू कंट्रोलर पर टच हैंडलिंग विधियों के माध्यम से अधिसूचित नहीं किया जा रहा है।
मुझे दूसरे स्पर्श में परिवर्तनों के बारे में कैसे अधिसूचित किया जा सकता है?
मैं वास्तव में स्थान के परिवर्तन या दूसरे स्पर्श की स्थिति में परिवर्तन के जवाब देने में सक्षम होना चाहता हूं, क्योंकि पहला स्पर्श भी बदलता है। बहुत समय यह कोई मुद्दा नहीं होगा क्योंकि दूसरे पर प्रभाव डाले बिना एक स्पर्श को बदलना बहुत मुश्किल है, लेकिन मेरे पास कम से कम एक स्थिति है जहां यह एक मुद्दा हो सकता है। क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है? क्या किसी और ने इस व्यवहार को देखा है या इसके साथ समस्याएं हैं?
यदि यह प्रासंगिक है, तो मैं आईओएस 3 जी चल रहा आईओएस 5.1 का उपयोग कर रहा हूं।
क्या आपके पास अपने दृश्य पदानुक्रम में 'अनन्य टच = हाँ कहीं और है? ऐसा लगता है कि पहला स्पर्श 'अनन्य टच = हाँ' –
के साथ दृश्य के उप-दृश्य में है, मैं इसे कोड में कहीं भी सेट नहीं करता हूं, लेकिन मैं स्टोरीबोर्ड का उपयोग कर रहा हूं - क्या उन्होंने इसे कहीं और सेट कर दिया है? क्या कोई अन्य संपत्ति है जिसका एक समान प्रभाव हो सकता है? यह व्यू कंट्रोलर दृश्य पदानुक्रम में कुछ पीढ़ी गहरी है, इसलिए इसके पर्यवेक्षकों में से एक ऐसा कुछ कर रहा है जिसकी मुझे उम्मीद नहीं है। – rankAmateur
मुझे बहुत देर हो सकती है लेकिन क्या आपने देखा कि प्रत्येक विधि में सुपर को कॉल किया जा रहा है: स्पर्श – advantej