Friday, March 6, 2026
HomeiOS Developmentios - Disable Left swipe in first viewcontroller and proper swipe in...

ios – Disable Left swipe in first viewcontroller and proper swipe in final viewcontroller of PageViewController

[ad_1]

I’ve a UIPageViewController named OnboardingViewController with three viewcontrollers in there. I even have a pageControl which has a faucet gesture set on it. My Pageviewcontroller’s transitionStyle is
scroll and I don’t wish to change it to pageCurl. I’ve turned off carousel habits of the setup by beneath code the place pages is the array of viewcontrollers.

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 
        guard let currentIndex = pages.firstIndex(of: viewController) else { return nil }
        if currentIndex == 0 {
            return nil             
        } else { 
            return pages[currentIndex - 1] 
        }
    }
    
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let currentIndex = pages.firstIndex(of: viewController) else { return nil }
        if currentIndex < pages.depend - 1 {   
            return pages[currentIndex + 1]  
        } else {
            pageControl.currentPage = pages.depend - 1
            return nil             
        }
    }

However After that although I’m able to cease the round rotation of all screens I’m seeing some bounce when I attempt to swipe left on my first viewcontroller and proper on my final viewcontroller. I attempted to forestall it by beneath means:

for view in self.view.subviews {
    if let scrollView = view as? UIScrollView {
          scrollView.delegate = self
          break
        }
     }

extension OnboardingViewController: UIScrollViewDelegate {
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if pageControl.currentPage == 0 && scrollView.contentOffset.x < scrollView.bounds.measurement.width {
                scrollView.contentOffset = CGPoint(x: scrollView.bounds.measurement.width, y: 0)
        } else if pageControl.currentPage == pages.depend - 1 && scrollView.contentOffset.x > scrollView.bounds.measurement.width {
                scrollView.contentOffset = CGPoint(x: scrollView.bounds.measurement.width, y: 0)
        }
    }
    
    func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        if pageControl.currentPage == 0 && scrollView.contentOffset.x < scrollView.bounds.measurement.width {
                scrollView.contentOffset = CGPoint(x: scrollView.bounds.measurement.width, y: 0)
        } else if pageControl.currentPage == pages.depend - 1 && scrollView.contentOffset.x > scrollView.bounds.measurement.width {
                scrollView.contentOffset = CGPoint(x: scrollView.bounds.measurement.width, y: 0)
        }

    }
}

However it isn’t working and when I’m tapping the final dot on pageControl it is not scrolling to the final web page. What can I do right here?

[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments