如何在特定视图的页面控制器中查看滚动后停止

时间:2017-11-23 04:47:35

标签: swift4

我使用storyboard集成了pageviewcontroller。我有4个视图。如何在第三个视图滚动后停止。如何在scoll之后禁用?

这是我的代码。如何在ThirdViewController中滚动后停止。

导入UIKit

类PageViewController:UIPageViewController,UIPageViewControllerDelegate,UIPageViewControllerDataSource {

var pageControl = UIPageControl()

// MARK: UIPageViewControllerDataSource

lazy var orderedViewControllers: [UIViewController] = {
    return [self.newVc(viewController: "sbRed"),self.newVc(viewController: "sbBlue"),self.newVc(viewController: "sbOrange"),self.newVc(viewController: "sbGray")]
}()

override func viewDidLoad() {
    super.viewDidLoad()
    self.dataSource = self
    self.delegate = self



    // This sets up the first view that will show up on our page control
    if let firstViewController = orderedViewControllers.first {
        setViewControllers([firstViewController],
                           direction: .forward,
                           animated: true,
                           completion: nil)
    }

    configurePageControl()

    // Do any additional setup after loading the view.
}

func configurePageControl() {
    // The total number of pages that are available is based on how many available colors we have.
    pageControl = UIPageControl(frame: CGRect(x: 0,y: UIScreen.main.bounds.maxY - 50,width: UIScreen.main.bounds.width,height: 50))
    self.pageControl.numberOfPages = orderedViewControllers.count
    self.pageControl.currentPage = 0
    self.pageControl.tintColor = UIColor.black
    self.pageControl.pageIndicatorTintColor = UIColor.white
    self.pageControl.currentPageIndicatorTintColor = UIColor.black
    self.view.addSubview(pageControl)
}

func newVc(viewController: String) -> UIViewController {
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: viewController)
}


// MARK: Delegate methords
func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
    let pageContentViewController = pageViewController.viewControllers![0]
    self.pageControl.currentPage = orderedViewControllers.index(of: pageContentViewController)!
}

// MARK: Data source functions.
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
    guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
        return nil
    }

    let previousIndex = viewControllerIndex - 1

    // User is on the first view controller and swiped left to loop to
    // the last view controller.
    guard previousIndex >= 0 else {
        return orderedViewControllers.last
        // Uncommment the line below, remove the line above if you don't want the page control to loop.
        // return nil
    }

    guard orderedViewControllers.count > previousIndex else {
        return nil
    }

    return orderedViewControllers[previousIndex]
}

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
    guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else {
        return nil
    }

    let nextIndex = viewControllerIndex + 1
    let orderedViewControllersCount = orderedViewControllers.count

    // User is on the last view controller and swiped right to loop to
    // the first view controller.
    guard orderedViewControllersCount != nextIndex else {
        return orderedViewControllers.first
        // Uncommment the line below, remove the line above if you don't want the page control to loop.
        // return nil
    }

    guard orderedViewControllersCount > nextIndex else {
        return nil
    }

    return orderedViewControllers[nextIndex]
}

}

导入UIKit

class ThirdViewController:UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要使用UiPagerViewDatasource方法: a)func pageViewController(UIPageViewController,viewControllerBefore:UIViewController)

b)func pageViewController(UIPageViewController,viewControllerAfter:UIViewController)

示例:

func pageViewController(UIPageViewController, viewControllerBefore: UIViewController){

if viewController == controllerA {

    return controllerB;
}
else if viewController == controllerB {

    return controllerC;
}
else ifviewController == controllerC {

    return nil;
}}

func pageViewController(UIPageViewController, viewControllerAfter: UIViewController){
if (viewController == controllerC) {

    return controllerB;
}
else if(viewController == controllerB) {

    return controllerA;
}
else {

    return nil;
}}

设置您需要调用的视图控制器:

pager.setViewControllers([selectingViewController]?, direction: UIPageViewControllerNavigationDirectionForward, animated: false, completion:nil)