2011-11-21 14 views
19

में 2 उंगली स्क्रॉलिंग को अक्षम करें मैं अपने UIScrollView में दो-उंगली स्क्रॉलिंग को अक्षम करना चाहता हूं।
मैं इसे subclassed और निम्न कोड के साथ अपने में निर्मित इशारा recognizers बदलाव:UIScrollView

for (UIGestureRecognizer *mgestureRecognizer in scroller.gestureRecognizers) {  
    if ([mgestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) 
    { 
     UIPanGestureRecognizer *mpanGR = (UIPanGestureRecognizer *) mgestureRecognizer; 
     mpanGR.minimumNumberOfTouches = 1; 
     mpanGR.maximumNumberOfTouches = 1; 

    } 

    if ([mgestureRecognizer isKindOfClass:[UISwipeGestureRecognizer class]]) 
    { 
     UISwipeGestureRecognizer *mswipeGR = (UISwipeGestureRecognizer *) mgestureRecognizer; 
     mswipeGR.numberOfTouchesRequired = 1; 
    } 

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

कोई विचार?

उत्तर

19

मुझे एहसास है कि यह एक पुराना धागा है, लेकिन मुझे इसे समझने में काफी समय लगा, इसलिए मैंने सोचा कि मैं साझा करूंगा। यदि आप 5.0 से अधिक iOS SDK का उपयोग कर रहे हैं, हो सकता है आप सीधे ui पैन इशारा पहचानकर्ता का उपयोग कर सकते

// set up a two-finger pan recognizer as a dummy to steal two-finger scrolls from the scroll view 
// we initialize without a target or action because we don't want the two-finger pan to be handled 
UIPanGestureRecognizer *twoFingerPan = [[UIPanGestureRecognizer alloc] init]; 
twoFingerPan.minimumNumberOfTouches = 2; 
twoFingerPan.maximumNumberOfTouches = 2; 
[scrollView addGestureRecognizer:twoFingerPan]; 
+1

मेरे लिए काम नहीं किया – Pascalius

+0

यह नहीं होना चाहिए * 1 *:

आप करने के लिए अपने जवाब में समाधान पा सकते हैं न्यूनतम और अधिकतम के लिए? (2 के बजाय?) – yonel

+1

कोड 2-उंगली पैन जेस्चर खाने से 2-उंगली पैनिंग अक्षम करता है।तो न्यूनतम और अधिकतम स्पर्श होना चाहिए 2. –

3

: यहाँ है कि मैं क्या दो उंगलियों स्क्रॉल निष्क्रिय करने के लिए किया था है।

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView; 

...... 

[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1]; 
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1]; 
+0

धन्यवाद drskur ... यह मेरे लिए बहुत अच्छा काम करता है –

0

मैं इस प्रश्न को फिर से खोलना चाहता हूं।

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView; 

...... 

[self.scrollView.panGestureRecognizer setMinimumNumberOfTouches:1]; 
[self.scrollView.panGestureRecognizer setMaximumNumberOfTouches:1]; 

मैं iOS 7 और iOS 8 पर इस समाधान की कोशिश की, और मुझे लगता है कि setMaximumNumberOfTouches: 1 कोई प्रभाव नहीं है। 2 या 3 अंगुलियों स्क्रॉलिंग संभव है। :(

0

मैं पुष्टि कर सकता यह अभी भी iOS 8 में एक मुद्दा है, लेकिन केवल तभी जब UIPanGestureRecognizer एक UIScrollView अंतर्निहित है। एक ताजा UIPanGestureRecognizer साथ एक UIView तैयार करना और उसका maximumNumberOfTouches की स्थापना संपत्ति के रूप में उम्मीद काम करता है।

प्रस्तुत rdar :। // 20890684 और http://openradar.appspot.com/radar?id=6191825677189120 में कॉपी किया कृपया धोखा देने के लिए स्वतंत्र महसूस

0

समस्या:।

जब UIPanGestureRecognizer अंतर्निहित है एक UIScrollView (जो दुर्भाग्य से भी असर करता है UIPageViewController) maximumNumberOfTouches व्यवहार नहीं कर रहा है के रूप में उम्मीद - minimumNumberOfTouches लेकिन हमेशा निचले सिरे सही ढंग से सीमित करता है।

इन मानकों की निगरानी करते समय वे अपना काम करते हैं - यह सिर्फ UIScrollView उनका सम्मान नहीं करता है और उनके मूल्यों को अनदेखा करता है!


निदान:

UIScrollView scrolling only with one finger