2013-03-06 6 views
7

scrollViewWillEndDragging अधिभावी है - यह बस जहां स्नैप करना गणना करता है:UIScrollView हमेशा मंदी चेतन नहीं है जब मेरे ओवरराइड कोड यहाँ

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

    if(targetContentOffset->y < 400) { 
     targetContentOffset->y = 0; 
     return; 
    } 

    int baseCheck = 400; 

    while(baseCheck <= 10000) { 
     if(targetContentOffset->y > baseCheck && targetContentOffset->y < baseCheck + 800) { 
      targetContentOffset->y = (baseCheck + 340); 
      return; 
     } 
     baseCheck += 800; 
    } 

    targetContentOffset->y = 0; 
} 

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

कोई विचार?

उत्तर

6

मैं इसे मैन्युअल रूप से एनिमेट करने के लिए समाप्त हो गया। उसी फ़ंक्शन में, मैंने targetContentOffset को उस स्थान पर सेट किया जहां उपयोगकर्ता ने छोड़ा (वर्तमान सामग्री ऑफ़सेट) ताकि वह अपनी एनीमेशन ट्रिगर न करे, और फिर मैंने सामग्री गणना को मेरी गणना में सेट कर दिया। इसके अतिरिक्त, मैंने ट्यूटोरियल पेज परिवर्तनों को ट्रिगर करने के लिए एक वेग जांच में जोड़ा। यह सही नहीं है, लेकिन उम्मीद है कि यह एक ही मुद्दे के साथ अन्य की मदद करेगा।

(मैं पठनीयता के लिए ऊपर समारोह संशोधित कोई भी मेरा गणना को देखने के लिए की जरूरत है के बाद से)

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

    CGPoint newOffset = CGPointMake(targetContentOffset->x, targetContentOffset->y); 
    *targetContentOffset = CGPointMake([broadsheetCollectionView contentOffset].x, [broadsheetCollectionView contentOffset].y); 

    if(velocity.y > 1.4) { 
     newOffset.y += pixelAmountThatWillMakeSurePageChanges; 
    } 
    if(velocity.y < -1.4) { 
     newOffset.y -= pixelAmountThatWillMakeSurePageChanges; 
    } 

    // calculate newoffset 

    newOffset.y = calculatedOffset; 
    [scrollView setContentOffset:newOffset animated:YES]; 
} 
+5

मैं एक क्षैतिज UICollectionView के साथ इस की कोशिश की, और जब तक यह काम किया, जिसके परिणामस्वरूप एनीमेशन चिड़चिड़ा था, मुझे लगता है कि एक ही समय में दो एनिमेशन चल रहे थे। 'dispcont_async' में' setContentOffset: 'को लपेटना। – JLundell

+0

क्या आपने कभी इसे 'सही' तरीका बनाया है? – Lukasz

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