मैं एक पेज व्यू कंट्रोलर बनाने की कोशिश कर रहा हूं कि एक बार जब आप आखिरी स्क्रीन (दाएं स्वाइपिंग) पर पहुंच जाते हैं तो यह पहली बार शुरू होता है, और यदि आप पहली स्क्रीन (बाएं स्वाइपिंग) हिट करने के बाद पीछे की ओर स्क्रॉल करते हैं तो यह आखिरी तक स्क्रॉल करेगा .

मैंने इस पोस्ट को देखा: मंडलियों में स्क्रॉल करें

लेकिन स्क्रॉल करते समय यह अभी भी पहली और आखिरी स्क्रीन पर रुक रहा है। यहां बताया गया है कि मेरा डेटा स्रोत कैसे सेट किया गया है:

var viewControllerList: [UIViewController]!

      func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let vcIndex = viewControllerList.firstIndex(of: viewController) else {return nil}
        
        let previousIndex = vcIndex - 1
        
        guard previousIndex >= 0 else {return viewControllerList.last}
        
        guard viewControllerList.count > previousIndex else { return nil}
        
        return viewControllerList[previousIndex]
}

  func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let vcIndex = viewControllerList.firstIndex(of: viewController) else {return nil}
        
        let nextIndex = vcIndex + 1
        
        guard viewControllerList.count != nextIndex else {return nil}
        
        guard viewControllerList.count > nextIndex else
        {
            return viewControllerList.first}
    
        
        return viewControllerList[nextIndex]
}

किसी भी मदद की सराहना की जाती है !!

0
SwiftyJD 20 अगस्त 2020, 01:03

2 जवाब

सबसे बढ़िया उत्तर

यह उन रेखाओं के कारण है जहां आप return nil हैं। जब तक आप ऐसा करते हैं, इसका अर्थ है "इस दिशा में आगे बढ़ना असंभव है"। लेकिन मेरा मानना ​​है कि आपकी आवश्यकता यह है कि हमेशा आगे या तो दिशा में जाना संभव है। मैं

0
matt 20 अगस्त 2020, 02:15

आपका अनुक्रमणिका तर्क दोषपूर्ण है।

उदाहरण के लिए पहले तर्क में आप जांचते हैं

previousIndex >= 0

इसका मतलब है कि आप कभी भी विपरीत दिशा में 0 को इंडेक्स नहीं करेंगे। आपको उस चेक में चाहिए

previousIndex > -1 

यह सुनिश्चित करने के लिए कि आप अनुक्रमणिका क्रम में 3 पृष्ठ सरणी के मामले में आगे बढ़ सकते हैं

2,1,0,2…

इसी तरह आगे दिशा में आप उपयोग करते हैं

guard viewControllerList.count != nextIndex else {return nil}

जब आप पहला नियंत्रक वापस करना चाहते हैं तो अनुक्रम को प्रभावी ढंग से रोकना

guard viewControllerList.count != nextIndex else {return viewControllerList.first}

सुनिश्चित करें कि आपका तर्क आपको 3 पृष्ठ के मामले में अनुक्रमणिका दे सकता है।

0,1,2,0…
1
Warren Burton 20 अगस्त 2020, 01:27