2009-07-09 15 views
32

क्या UIScrollView को कम करने के लिए कोई तरीका है?UIScrollView को निष्क्रिय करना

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

+1

आप ऐसा क्यों करेंगे? –

+5

एडम, मुझे पता है कि डिफ़ॉल्ट व्यवहार को बदलने की सिफारिश नहीं है, लेकिन मुझे लगता है कि मेरे विशेष मामले में यह समझ में आता है। मैं कैनवास पर सीधे वस्तुओं को संपादित करने की क्षमता के साथ एक विस्तारित कैनवास लागू कर रहा हूं। इस ऑन-कैनवास-एडिट मोड में प्रवेश करते समय मैं उपयोगकर्ता को स्क्रॉल की दूरी को प्रतिबंधित करना चाहता हूं ताकि ऑब्जेक्ट दृश्यमान सीमा में हमेशा हो। उपयोग को आगे स्क्रॉल करने की अनुमति है, लेकिन यह उंगली पर वापस उछाल जाएगा। मैं सामग्री आकार संपत्ति से अवगत हूं, लेकिन यह मेरे बढ़ते कैनवास में हस्तक्षेप करता है। –

+2

मेरी स्थिति में, हम किराए के काम के लिए भुगतान कर रहे थे और ग्राहक ने अनुरोध किया कि हम मंदी गति को हटा दें। – Mark

उत्तर

60

यह UIScrollView प्रतिनिधि विधि scrollViewWillBeginDecelerating का उपयोग करके वर्तमान स्क्रीन स्थिति में स्वचालित रूप से सामग्री ऑफ़सेट सेट करने के लिए किया जा सकता है।

को लागू करने के लिए:

  1. अपने UIScrollView वस्तु के लिए एक प्रतिनिधि असाइन करें अगर आप पहले से ही ऐसा नहीं किया है।
  2. अपने प्रतिनिधि के .m कार्यान्वयन फ़ाइल में कोड की निम्न पंक्तियां जोड़ें:

    -(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ 
        [scrollView setContentOffset:scrollView.contentOffset animated:YES]; 
    } 
    

देखा! कोई और ऑटो स्क्रॉल नहीं।

+1

अच्छा। मुझे नहीं पता क्यों, लेकिन यह काम करता है। धन्यवाद! –

+0

मेरा कूदता है जहां मंदी को वापस शुरू किया गया था जहां यह शुरू हुआ ... कोई सुझाव? – jjxtra

+0

यह ठीक काम कर रहा है .. –

18

आप केवल मंदी दर बहुत अधिक कर सकते हैं। एक अनंत दर के साथ, यह तुरंत बंद हो जाएगा। इन स्थिरांक को दर सेट करके देखें:

scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; 

और

scrollView.decelerationRate = UIScrollViewDecelerationRateFast; 

तो तेजी से अभी भी काफी तेजी से आप के लिए नहीं है, UIScrollViewDecelerationRateFast बस, एक नाव के रूप में typedef'ed है, ताकि आप बस इसे गुणा कर सकते हैं 10 या उससे अधिक के कारक द्वारा इसे और भी तेज करने के लिए।

+0

आपके उत्तर के लिए धन्यवाद! मैंने decelerationRate संपत्ति के लिए विभिन्न मूल्यों की कोशिश की, लेकिन मंदी को गैर अस्तित्व में प्रकट करने के लिए प्रबंधित नहीं किया। एक त्वरित स्वाइप हमेशा स्क्रॉलव्यू स्क्रॉल को काफी मात्रा में बनाता है। –

+9

मेरे अनुभव में, 'decelerationRate' प्रॉपर्टी केवल दस्तावेज़ीकरण में बताए गए मानों का जवाब देती है:' UIScrollViewDecelerationRateNormal' और 'UIScrollViewDecelerationRateFast'। –

+0

यही वह है जिसे मैं खोज रहा था। धन्यवाद :) – codeburn

38

आईओएस 5.0 या बाद के लिए, setContentOffset:animated: पर कॉल करने से बेहतर तरीका है।

प्रतिनिधि विधि scrollViewWillEndDragging:withVelocity:targetContentOffset: लागू अपने .m फ़ाइल में:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
        withVelocity:(CGPoint)velocity 
       targetContentOffset:(inout CGPoint *)targetContentOffset { 
    *targetContentOffset = scrollView.contentOffset; 
} 

वर्तमान targetContentOffset को ऑफसेट नियत स्वत: स्क्रॉलिंग से UIScrollView बंद हो जाता है।