2012-07-18 20 views

उत्तर

1

आप सामग्री ऑफ़सेट में अंतर को ट्रैक कर सकते हैं। पुराने सदस्य को एक सदस्य/स्थैतिक चर में रखें और वर्तमान के खिलाफ जांचें। यदि पुराना मान कम है तो स्क्रॉलिंग को नीचे निर्देशित किया गया था और इसके विपरीत।

2

UITableViewUIScrollView सबक्लास है, इस प्रकार आप खुद को UIScrollViewDelegate के रूप में सेट कर सकते हैं और स्क्रॉल व्यू प्रतिनिधि कॉलबैक प्राप्त कर सकते हैं।

इन प्रतिनिधि तरीकों में से एक के लिए तर्क (-scrollViewDidScroll:) स्क्रोल दृश्य है जो स्क्रॉल करता है, आप इसे अपने टेबल दृश्यों से तुलना कर सकते हैं यह जानने के लिए कि यह कौन सा स्क्रॉल किया गया था।


क्षमा करें, मैंने आपके प्रश्न को गलत तरीके से पढ़ा है। मैंने सोचा था कि आप जानना चाहते हैं जो तालिका दृश्य स्क्रॉल किया जा रहा है (मुझे "रास्ता" याद आया)।

दिशा जानने के लिए आप पिछले ऑफसेट को एक चर में रख सकते हैं और देख सकते हैं कि डेल्टा (current.y - past.y) सकारात्मक है (नीचे स्क्रॉल करना) या नकारात्मक (स्क्रॉलिंग)।

41
-(void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGPoint currentOffset = scrollView.contentOffset; 
    if (currentOffset.y > self.lastContentOffset.y) 
    { 
     // Downward 
    } 
    else 
    { 
     // Upward 
    } 
    self.lastContentOffset = currentOffset; 
} 
+0

नमस्कार मैं मदद की जरूरत है इस लक्ष्य को हासिल करने के लिए। आप self.lastContent ऑफ़सेट कहां सेट करते हैं? धन्यवाद :) – veereev

+2

हाय बस अपने स्क्रॉल प्रतिनिधि वर्ग में एक संपत्ति को परिभाषित करें। @property (असाइन, nonatomic) CGPoint lastContentOffset; – citydeer

+0

भयानक उत्तर फ़्लिपिंग, धन्यवाद @ citydeer :) – Supertecnoboff

12

क्या हम ऐसा कर सकते हैं?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

     if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) { 
     // down 
     } else { 
     // up 
     } 

    } 
+0

यह प्रारंभिक स्पर्श के आधार पर ऊपर या नीचे भेज देगा, इसलिए यदि आप pt200 पर शुरू करेंगे, तो pt100 तक और pt199 तक नीचे जाएं, आप ऊपर राज्य प्राप्त करेंगे –

+0

बिल्कुल सही! यह UIScrollView बाउंस बदलने की स्क्रॉल दिशा की समस्या हल करता है। – chicobermuda

+0

यह सच नहीं है, यदि आप नीचे स्क्रॉल करते हैं तो 100.0pt और 1.0pt ऊपर की ओर जाने दें, आपका कोड नीचे की ओर ट्रिगर करेगा (transl.y 99.0 होगा) –

28
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
        withVelocity:(CGPoint)velocity 
      targetContentOffset:(inout CGPoint *)targetContentOffset{ 

    if (velocity.y > 0){ 
     NSLog(@"up"); 
    } 
    if (velocity.y < 0){ 
     NSLog(@"down"); 
    } 
} 
+2

यह सबसे अच्छा जवाब जैसा लगता है ... –

+0

बहुत बढ़िया .. !! !:) – itsji10dra

+0

और यदि आप रीफ्रेश करने के लिए होमब्री खींचना चाहते हैं (या अन्य दृश्य ऑफसेट रिश्तेदार व्यवहार), तो यह तरीका है जहां आप स्क्रॉलव्यू के ऑफसेट का पता लगाने के दौरान टाई करेंगे - 'targetContentOffset' नहीं (वह जगह है जहां स्क्रॉल समाप्त हो जाएगा ऊपर एनीमेशन के बाद): 'अगर (scrollView.contentOffset.y <0)' –

0
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    if (yourTableView.isDragging || yourTableView.isDecelerating) 
     { 
       // your tableview is scrolled. 
       // Add your code here 
     } 
} 

यहाँ आप अपने tableview नाम के बजाय "yourTableView" को बदलने के लिए।

yourTableView.isDragging - यदि उपयोगकर्ता स्क्रॉल करना शुरू कर देता है तो यह यस लौटाता है। इसे आरंभ करने के लिए कुछ समय और दूरी की आवश्यकता हो सकती है।

yourTableView.isDecelerating - यदि उपयोगकर्ता ड्रैग नहीं कर रहा है (स्पर्श करें) लेकिन स्क्रॉल दृश्य अभी भी चल रहा है, तो यह YES लौटाता है।

0

आप इस तरह से UIScrollView की प्रतिनिधि विधि को लागू करके ऐसा कर सकते हैं, यह सुंदर है।

पीएस: lastOffset और scrollingUpward व्यू कंट्रोलर की संपत्ति है।

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGPoint currentOffset = scrollView.contentOffset; 
    self.scrollingUpward = currentOffset.y > self.lastOffset.y; 
    self.lastOffset = currentOffset; 
} 
1
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 

     if targetContentOffset.memory.y < scrollView.contentOffset.y { 
      //println("Going up!") 

     } else { 
      // println("Going down!") 

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

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