2012-06-04 18 views
26

के किनारों पर काम नहीं कर रहा है। मैं एक कस्टम टैब बार को लागू करने की कोशिश कर रहा हूं जो स्क्रॉल करने योग्य है और प्रत्येक टैब बार आइटम पर पेजिंग है। इसके लिए मैं प्रतिनिधि स्क्रॉल का उपयोग कर रहा हूं VisualVillEndDragging: withVelocity: targetContentOffset: जो एक समस्या के साथ पूरी तरह से काम करता है।scrollViewWillEndDragging: withVelocity: targetContentOffset: UISCrollView

जिस तरह से मेरी पेजिंग काम करता है, अगर सामग्री ऑफसेट सही आइटम के पास है, तो यह उस सामग्री के ऑफसेट में targetContentOffset बदल जाता है। बाईं तरफ के लिए वही बात।

समस्या यह है कि, जब भी मैं पहले आइटम के बाएं हिस्से में हूं और आखिरी का अधिकार (स्क्रॉल व्यू क्षैतिज रूप से काम करता है) तो इसे ContentOffset 0 पर जाना चाहिए और सही आइटम की सामग्री ऑफसेट (स्क्रीन पर लोगों को कम करें), लेकिन ऐसा नहीं है।

मैंने डीबगर और लक्ष्यकंटऑफसेट-> एक्स वास्तव में 0 (पहले मामले में - बाईं ओर आइटम के बाईं ओर) की जांच की है। तो समस्या UIScrollView वहां स्क्रॉल नहीं है। मैं हार गया हूं।

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
       withVelocity:(CGPoint)velocity 
      targetContentOffset:(inout CGPoint *)targetContentOffset{ 
    NSInteger index = lrintf(targetContentOffset->x/self.tabWidth); 
    targetContentOffset->x = index * self.tabWidth; 
} 

यहाँ आरेख समझा मुझे क्या करना चाहते हैं:

यहाँ मेरी कार्यान्वित प्रतिनिधि है।

|-------|-------|-------|-------|-------|-------|-------| 
|  |  |  |  |  |  |  | 
|  |  |  |  |  |  |  | 
|_______|_______|_______|_______|_______|_______|_______| 

     |_______________________________________| 
     where it is and i scroll it to the left 

    <----| 

    |_______________________________________| 
       where it would stop 

|_______________________________________| 
     where i want it to stop 

उत्तर

14

यह एक ज्ञात मुद्दा है। कुछ जांच के बाद और अन्य लोगों से बात करने के बाद यह सुझाव दिया गया कि यह एक बग हो सकता है, जो सही साबित हुआ। मैंने इसे ऐप्पल को बताया और इसे डुप्लिकेट के रूप में चिह्नित किया गया था लेकिन अभी भी खुला है। एक ही समस्या के साथ आप में से उन लोगों के लिए बस जवाब देना। मैं बिग पापू की तरह काम करता हूं, जो मुझे चाहिए (0.1 ऐसा करने लगता है) के करीब ऑफसेट का उपयोग करके। सही अंत के लिए वही।

+0

मुझे भी इस समस्या का सामना करना पड़ रहा है। कोई भी मौका आप ऐप्पल बग आईडी नंबर-या बेहतर पोस्ट कर सकते हैं, ओपनराडर एंट्री के लिए एक लिंक- डुप्लिकेट बग रिपोर्ट पोस्ट करने में, और संभवतः अन्य लोगों की सहायता के लिए? (यह काफी प्रसिद्ध है कि ऐप्पल उन्हें प्राप्त रिपोर्ट की संख्या के आधार पर फिक्सिंग बग को प्राथमिकता देता है।) – Calrion

+0

निश्चित रूप से। यह 10255505 का डुप्लिकेट है लेकिन ऐसा लगता है कि ओपनराडर में मौजूद नहीं है। वैसे भी ऐसा लगता है कि अब बंद हो रहा है, लेकिन मुझे नहीं पता कि वे ठीक कर देंगे या नहीं। – dvieira

3

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

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद। आप सही हे। मैंने भी, अन्य लोगों से जांच की और बात की और पाया कि यह एक बग था। बस अपने खुद के प्रश्न का उत्तर देना भूल गए, क्षमा करें (यदि आप अधिक जानकारी चाहते हैं तो कृपया इसे देखें)। ऐसा लगता है कि 0.1 की तरह ऑफसेट ऐसा लगता है। वैसे भी, बहुत बहुत धन्यवाद। – dvieira

0

आप एक क्षैतिज तालिका दृश्य का उपयोग कर रहे हैं, तो आपके scrollViewWillEndDragging अंदर: withVelocity: targetContentOffset: समारोह, आप कॉल कर सकते हैं:

[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:<index> inSection:<section>] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

मैं इस पाया targetContentOffset- में हेरफेर करने की कोशिश कर की तुलना में बेहतर काम करने के लिए> एक क्षैतिज तालिका दृश्य में वाई।

8

मैंने बिग पापू द्वारा सुझाए गए शून्य या सामग्री आकार के कुछ अंतिम ऑफसेट को सेट करने का प्रयास किया लेकिन ध्यान दिया कि यह ओवर-स्क्रॉल बाउंस को हटा देता है।

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

    float expectedOffset = targetContentOffset->x; 
    if (expectedOffset == 0 || expectedOffset == scrollView.contentSize.width) return; // Scroll view will bounce so leave the targetContentOffset. 

    float targetOffset = [self roundedOffset:expectedOffset]; // Round your offset. 

    // Adjust the offset to make sure it works. 
    if (targetOffset == 0) targetOffset = 1; 
    else if (targetOffset == SCROLLVIEW_WIDTH) targetOffset = SCROLLVIEW_WIDTH - 1; 

    targetContentOffset->x = targetOffset; 
} 

आप निश्चित रूप से तो scrollViewDidEndDecelerating: उपयोग कर सकते हैं कि 1 अंक scrollview को स्थानांतरित करने के लिए: यह मेरे समाधान मूल targetContentOffset जाँच करने के लिए अगर यह होता है अगर यह शून्य या contentSize के बराबर करके उसे छोड़ है देखने के लिए था ।

8

आईओएस 6.0 पर जारी किया गया मुद्दा।

अब यह काम करता है जैसा कि यह करना चाहिए।