2011-10-27 14 views
6

संभव डुप्लिकेट:
UIScrollview getting touch eventsiPhone - UIScrollView ... एक स्पर्श के निर्देशांक का पता लगाने

यह जहां एक UIScrollView में उंगली छुआ पता लगाने के लिए संभव है?

मेरा मतलब है, मान लीजिए कि उपयोगकर्ता अपनी उंगली इस तरह से उपयोग करता है: टैप और स्क्रॉल, उंगली और फिर, टैप्स और स्क्रॉल इत्यादि ले जाता है। क्या सीजीपॉइंट को जानना संभव है जहां स्वयं के संबंध में नलियां हुईं। स्क्रोलर में देखें क्या है? स्क्रोलर पूरे self.view पर कब्जा कर लिया।

धन्यवाद।

उत्तर

12

आप इशारा recognizers के साथ ऐसा कर सकते हैं। के लिए एक टैप स्थान UITapGestureRecognizer

UITapGestureRecognizer *tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)] autorelease]; 
[myScrollView addGestureRecognizer:tapRecognizer]; 

- (void)tapAction:(UITapGestureRecognizer*)sender{ 
    CGPoint tapPoint = [sender locationInView:myScrollView]; 
    CGPoint tapPointInView = [myScrollView convertPoint:tapPoint toView:self.view]; 
} 

का उपयोग self.view करने के लिए आप UIView कक्षा में convertPoint:toView: विधि का उपयोग कर सकते हैं

+0

नहीं। यदि मैं टैप करता हूं और स्क्रॉल नहीं करता तो टैपएक्शन बस ट्रिगर होता है। अगर मैं ऐसा करता हूं तो मैंने कहा, टैप करें, स्क्रॉल करें, उंगली उठाएं, टैप करें, स्क्रॉल करें, उंगली उठाएं, आदि, कोई टैप कभी नहीं पता चला है। स्क्रॉलर एक बड़े स्वाइप के बाद भी स्क्रॉल कर रहा है, तो कोई टैप कभी भी नहीं पता चला है। काम करने के लिए स्क्रोलर अभी भी होना चाहिए और एक सूखी नल बनाना है। – SpaceDog

+1

कई अन्य इशारा पहचानकर्ता हैं - यूआईपीएनजेस्टर रिकॉग्नाइज़र, यूआईपीआईएनजीजेस्टर रिकॉग्नाइज़र, यूआईएसवाइप जेस्चरर रिकॉग्नाइज़र, यूरोटेशन जेस्चर रिकॉग्नाइज़र। इसके अलावा, आप बहुत जटिल स्पर्शों का पता लगाने के लिए कस्टम पहचानकर्ता बना सकते हैं। मैंने सरल स्पर्श के साथ और अधिक लोकप्रिय उदाहरण दिया। – beryllium

+0

@RubberDuck क्या आपने यह पता लगाया है? मैं एक ही नाव पर हूं ... मैं एक यूआईसीओलेक्शन व्यू पर काम कर रहा हूं, मैं यह जानना चाहता हूं कि सेल व्यू पर उंगली स्पर्श है –

0

touchesBegan:withEvent: पर एक नज़र डालें आपको UITouch's का एनएसएससेट मिलेगा, और यूआईटीच में एक स्थान इनव्यू: विधि है जो स्पर्श के CGPoint को वापस करनी चाहिए।

+0

इस मामले में आपको UIScrollView – beryllium

0

आप संभवतः इसे उपclass करने और स्पर्शों को देखने में सक्षम होंगे।

http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIResponder_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006783-CH4-SW1

+0

उप-वर्ग की आवश्यकता है, यह इतना आसान नहीं है। टच्सबेगन बस एक स्पर्श का पता लगाता है यदि स्क्रॉलव्यू अभी भी चल रहा है और मैं इसे छूता हूं, स्पर्श करता हैगेगन कुछ भी पता नहीं लगाएगा। – SpaceDog

0

आप ध्यान में रखते हुए स्थान खोजने के लिए और यह करने के लिए स्क्रॉल ofset जोड़ सकता है कि tapPoint परिवर्तित करने के लिए पता लगाने के। अब, आपकी अगली समस्या यह है कि -(void)touchesBegan:touches:event नहीं कहा जाएगा क्योंकि ईवेंट आपके स्क्रॉलव्यू पर भेजे जाएंगे। इसे आपके UIScrollView को उप-वर्गीकृत करके तय किया जा सकता है और स्क्रॉलव्यू अगले प्रतिक्रियाकर्ता (आपके दृश्य) पर स्पर्श ईवेंट भेजता है।

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    // Position of touch in view 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint touchPoint = [touch locationInView:self.view]; 

    // Scroll view offset 
    CGPoint offset = scrollView.contentOffset; 

    // Result 
    CGPoint scrollViewPoint = CGPointMake(touchPoint.x, touchPoint.y + offset.y); 
    NSLog(@"Touch position in scroll view: %f %f", scrollViewPoint.x, scrollViewPoint.y); 
} 
+0

नहीं। स्पर्श करता है अगर मैं टैप करता हूं और स्क्रॉल नहीं करता हूं तो बैगन बस ट्रिगर होता है। अगर मैं ऐसा करता हूं तो मैंने कहा, टैप करें, स्क्रॉल करें, उंगली उठाएं, टैप करें, स्क्रॉल करें, उंगली उठाएं, आदि, कोई टैप कभी नहीं पता चला है। स्क्रॉलर एक बड़े स्वाइप के बाद भी स्क्रॉल कर रहा है, तो कोई टैप कभी भी नहीं पता चला है। काम करने के लिए स्क्रोलर अभी भी होना चाहिए और एक सूखी नल बनाना है। ऐसा लगता है कि यह आसान नहीं है। – SpaceDog

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