2012-12-23 29 views
8

मैं अपने आईओएस एप्लिकेशन में एक नेविगेशन डिवाइस के रूप में एक UIScrollView का उपयोग करने की कोशिश कर रहा हूं। असल में, मैं चाहता हूं कि एप्लिकेशन एक पेजिंग-सक्षम UIScrollView की स्थिति के आधार पर विशिष्ट सामग्री लोड करे। यह एक नेविगेशन व्हील की तरह है।UIScrollView स्थिति का पता लगाने

वर्तमान में, मेरे पास दो पृष्ठ (2 * 320) स्क्रॉलव्यू है, और मैं उचित सामग्री लोड करने के लिए scrollViewDidEndDragging प्रतिनिधि विधि और contentoffset.x का उपयोग कर रहा हूं। मैं इस तरह के रूप scrollview की स्थिति का निर्धारण करने की कोशिश:

if (scrollView.contentOffset.x < 320) { 
    // Load content 1 
    } 
else if (scrollView.contentOffset.x >= 320) { 
    // Load content 2 
    } 

मेरे समस्या यह है कि मैं या तो कैसे contentoffset के साथ काम करने के लिए या यह मेरी समस्या से निपटने के लिए उपयुक्त नहीं है समझ में नहीं आता है। किसी भी तरह से, मैं अटक गया हूँ। क्या कोई मुझे बता सकता है कि मैं गलत कहां गया और/या स्क्रॉलव्यू स्थिति निर्धारित करने के लिए मुझे एक और अधिक प्रभावी तरीका दिखा सकता हूं?

मैं बेवकूफ हूं, मैं यह उल्लेख करना भूल गया कि समस्या क्या है ... असल में, मैं स्क्रॉलव्यू की स्थिति को ट्रैक नहीं कर सकता। जब मैं दूसरे पृष्ठ पर जाता हूं तो यह केवल 620 सीमा (दाईं तरफ उछाल) पर जाता है तो यह केवल तभी परिवर्तन करता है। लेकिन जब मैं शुरुआती स्थिति (पृष्ठ 1) पर वापस जाता हूं, तो यह परिवर्तन पंजीकृत करता है। दूसरे शब्दों में, मेरी ट्रैकिंग सटीक नहीं है।

प्रतिनिधि और बाकी सब कुछ ठीक काम कर रहा है, मैं उन्हें लॉग इन करता हूं!

उत्तर

16

यह कहना मुश्किल है क्योंकि आपने कभी विशेष रूप से समस्या का उल्लेख नहीं किया है, लेकिन मैं इसमें कुछ अनुमान लगाऊंगा।

प्रतिनिधि विधि आप सभी स्क्रॉल विचारों प्रतिनिधि सेट करने के लिए याद रखने की आवश्यकता को नहीं बुलाया जा रहा है: ऑफसेट कि है

[myScrollView setDelegate:self];

अन्यथा, scrollViewDidEndDragging का उपयोग कर पुस्तक विचारों का पता लगाने के साथ समस्या यह है यह उस बिंदु पर ऑफसेट की जांच करेगा जहां आप ड्रैगिंग बंद कर देंगे जो गंतव्य पृष्ठों के भीतर या प्रारंभिक पृष्ठों के भीतर हो सकता है। एक विकल्प के रूप में, मेरा सुझाव है कि आप सामग्री ऑफ़सेट की जांच के लिए scrollViewDidEndDecelerating का उपयोग करें क्योंकि जैसे ही स्क्रॉल व्यू अपने गंतव्य पृष्ठ पर एक स्टॉप पर आता है, इसे कॉल किया जाएगा।

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    if (scrollView.contentOffset.x < 320) { 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
    } 
    else if (scrollView.contentOffset.x >= 320) { 
     NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset)); 
    } 
} 
7

मुझे लगता है कि यह आपकी मदद कर सकता है :)। scrollViewDidScroll के साथ आप हमेशा अपने scrollview की सही स्थिति मिलती है:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    if (scrollView.contentOffset.x < 320) 
    { 
     // Load content 1 
    } 
    else if (scrollView.contentOffset.x >= 320) 
    { 
     // Load content 2 
    } 
} 

NSLog(@"Position: %g", scrollView.contentOffset.x);

अपने ज फ़ाइल में प्रतिनिधि UIScrollViewDelegate मत भूलना।

+0

दुर्भाग्य है मेरी समस्या का समाधान नहीं करता । मैंने यह स्पष्ट करने के लिए कुछ अतिरिक्त जानकारी जोड़ा कि समस्या क्या है। –

4

यहाँ के रूप में पूर्णांक मूल्य वर्तमान स्थिति (पेज) प्राप्त करने के लिए एक समाधान: उपयोग scrollViewDidEndDecelerating: methode:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    NSLog(@"%i", (int)(_scrollView.contentOffset.x/_scrollView.frame.size.width)); 
} 
0

UIScrollViewDelegate का उपयोग करना,

func scrollViewWillBeginDragging(scrollView: UIScrollView){ 
     print("dragging begins") 
     print("Position: \(scrollView.contentOffset.x) , \(scrollView.contentOffset.y) ") 
    } 
संबंधित मुद्दे