2012-06-12 12 views
19

मेरे पास एक UIScrollView है और मैं चाहता हूं कि यह दोनों दिशाओं (यह वर्तमान में करता है) में स्क्रॉल करने में सक्षम हो, लेकिन एक समय में केवल एक ही। इसलिए, उदाहरण के लिए, यदि आप इसे क्षैतिज रूप से स्क्रॉल करना शुरू करते हैं, तो यह तब तक लंबवत नहीं होगा जब तक आप इसे जाने और लंबवत रूप से आगे बढ़ना शुरू नहीं करते। मैं यह करने के बारे में कैसे जा सकता हूं?UIScrollView एक समय में केवल एक दिशा में स्क्रॉलिंग

उत्तर

51

directionalLockEnabled संपत्ति को YES पर सेट करें। ऐप्पल दस्तावेज़ों से:

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

+2

हुह, मैं आईबी में है कि गुण सेट, लेकिन यह काम नहीं किया। यह केवल प्रोग्रामेटिक रूप से काम किया। धन्यवाद! – Letrstotheprez

+0

मैंने इसे इसमें जोड़ा: - (शून्य) scrollViewDidEndDecelerating: (UIScrollView *) scrollView मेरे लिए काम किया। और जोड़ा: समारोह में scrollView.directionalLockEnabled। जब मैंने इस जवाब को पढ़ा तो मुझे यह समझने में थोड़ा समय लगा कि मैं दिशा क्या जोड़ रहा था लॉक सक्षम है और जहां मैं इसे जोड़ रहा था –

4

इस प्रश्न का स्वीकार्य उत्तर पूरी तरह से सही नहीं है। (के रूप में मूल जवाब में उद्धृत) directionalLockEnabled के लिए वर्तमान प्रलेखन के अनुसार:

तो खींचें दिशा विकर्ण है, तो स्क्रॉल बंद नहीं किया जाएगा और उपयोगकर्ता किसी भी दिशा में खींच सकते हैं जब तक खींचें पूरा करती है।

मुझे यह मामला खुद मिल गया है। यदि ड्रैगिंग की प्रारंभिक दिशा x और y axes के बीच 45-डिग्री कोण के करीब है, तो दिशात्मक लॉकिंग विफल हो जाती है। यदि आप अधिक क्षैतिज या लंबवत खींचते हैं, तो सक्रिय लॉकिंग।

एक ही रास्ता के लिए सच uni-अक्षीय ताला पूरा करने के लिए, को देखने के लिए इस लिंक: http://bogdanconstantinescu.com/blog/proper-direction-lock-for-uiscrollview.html

2

इस लक्ष्य को हासिल करने के लिए सरल तरीका सेट कर दिया जाता YES को directionalLockEnabled और इस

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (scrollView.contentOffset.x != 0 && 
     scrollView.contentOffset.y != 0) { 
     scrollView.contentOffset = CGPointMake(0, 0); 
    } 
} 
+0

बहुत सरल और बहुत अच्छा काम करता है। धन्यवाद। –

0
तरह UIScrollerView प्रतिनिधि को लागू

यह मेरे लिए @ जो xi उत्तर के आधार पर काम किया। स्विफ्ट 3,0

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    if scrollView.contentOffset.x != 0 && scrollView.contentOffset.y != 0 { 
     scrollView.contentOffset = CGPoint(x: 0, y: 0) 
    } 
} 
संबंधित मुद्दे