33

मेरे पास लंबवत-स्क्रॉलिंग UIScrollView है। डिफ़ॉल्ट वर्टिकल स्क्रॉल व्यवहार की अनुमति देते हुए, मैं क्षैतिज पैन को भी संभालना चाहता हूं। मैंने स्क्रॉल व्यू पर पारदर्शी UIView डाला है, और इसमें एक पैन इशारा पहचानकर्ता जोड़ा है। इस तरह से मैं पैन को ठीक कर सकता हूं, लेकिन फिर स्क्रॉल व्यू को कोई इशारा नहीं मिलता है।UIScrollView ब्रेक स्क्रॉलिंग पर पैन जेस्चर को अवरुद्ध करना

मैं निम्नलिखित UIPanGestureRecognizerDelegate तरीकों को क्रियान्वित किया है, केवल क्षैतिज पैन करने के लिए मेरे इशारे पहचानकर्ता सीमित करने के लिए उम्मीद कर रहा है, लेकिन यह मदद नहीं की:

- (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    // Only accept horizontal pans here. 
    // Leave the vertical pans for scrolling the content. 
    CGPoint translation = [gestureRecognizer translationInView:self.view]; 
    BOOL isHorizontalPan = (fabsf(translation.x) > fabsf(translation.y)); 
    return isHorizontalPan; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return (otherGestureRecognizer == _scrollView.panGestureRecognizer); 
} 
+1

आप की कोशिश की है '[panGesture setCancelsTouchesInView: NO];'? बस 'reRecognizeSimultaneouslyWithGestureRecognizer' में YES को वापस लौटने से आप यह पता लगाने में सहायता कर सकते हैं कि समस्या कहां है। –

+0

बस कोशिश की, कोई फर्क नहीं पड़ता। – Macondo2Seattle

उत्तर

33

ठीक है, मैं यह समझ से बाहर। मुझे यह काम करने के लिए 2 चीजें करने की ज़रूरत है:

1) स्क्रॉल व्यू को अपने स्वयं के पैन पहचानकर्ता को संलग्न करें, न कि इसके शीर्ष पर एक और दृश्य।

2) यह UIGestureRecognizerDelegate विधि गुमराह व्यवहार को रोकती है जो तब होती है जब डिफ़ॉल्ट स्क्रॉलव्यू और मेरे दोनों को एक साथ बुलाया जाता है।

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 
+2

को पहचानने के डिफ़ॉल्ट व्यवहार को पहचानना चाहिए साथ-साथ WithGestureRecognizer NO को वापस करना है, ताकि जोड़ना अनदेखा –

+4

वापसी मान को 'YES' में बदल दें और यह बहुत अच्छा काम करता है। –

11

मैं हल करने के लिए एक ही समस्या थी और मैं ऐसा किया:

1) पुस्तक को देखने के लिए अपने ही पैन पहचानकर्ता संलग्न करें।

2) पर वापसी हाँ: - gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer:

यह दोनों इशारों काम करने के लिए अनुमति देगा। तो इसका मतलब यह है कि वर्टिकल स्क्रॉल पर, आपके पैनगेशर प्रतिनिधि और स्क्रॉल व्यू प्रतिनिधि दोनों को निकाल दिया जाएगा। यदि यह एक क्षैतिज स्क्रॉल है, तो यह केवल आपके पैनगेशर प्रतिनिधि को कॉल करेगा।

3) मेरे पैनगेशर प्रतिनिधि में, यह पता लगाएं कि यह एक क्षैतिज स्क्रॉल है, अगर यह नहीं है, तो अनदेखा करें।

+1

यह वही है जो मैं अपने उत्तर में अनुशंसा करता हूं। – Macondo2Seattle

+11

@ ब्लैकराइडर यह नहीं है। यह YES –

+0

देता है धन्यवाद 'इशारा करने वाला पहचानकर्ता: चाहिए पहचानना चाहिए साथ-साथ WithGestureRecognizer' ने चाल की है। – atulkhatri

0

स्विफ्ट जवाब:

let scrollViewPanGesture = UIPanGestureRecognizer(target: self, action: #selector(onPan(_:))) 
scrollViewPanGesture.delegate = self 
scrollView.addGestureRecognizer(scrollViewPanGesture) 

extension ViewController: UIGestureRecognizerDelegate { 
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
    } 
} 
संबंधित मुद्दे