为页面视图控制器设置取出无限循环

时间:2017-05-07 18:46:10

标签: ios swift uipageviewcontroller

我一直在尝试创建一个包含3个视图的开放场景,这些视图嵌入在页面视图控制器中。我们的目标是创建类似于Instagram的内容,您可以在中间使用社交媒体供稿,然后当您向右滑动时,它会将您带到视图中,如果向左滑动则会将您带到不同的视图。但是,使用我当前的代码,视图控制器无限刷卡,我想知道是否有人知道如何解决这个问题。

以下是我当前设置的外观: Current Setup of Page Views

以下是我希望它的样子: What I want the functionality to be

这是我的页面视图控制器代码。我有一个主页面视图控制器链接其他2个视图。

class HomeRootPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

    lazy var viewControllerArray: [UIViewController] = {
        return [self.ViewControllerInstance(name: "FeedViewController"),
               self.ViewControllerInstance(name: "DMViewController"),
               self.ViewControllerInstance(name: "ProfileViewController")]
    }()

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

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.dataSource = self
        self.delegate = self

        if let firstViewController = viewControllerArray.first {
            setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
        }
    }


    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

        guard let viewControllerIndex = viewControllerArray.index(of: viewController) else {
            return nil
        }

        let previousIndex = viewControllerIndex - 1

        guard previousIndex >= 0 else {
            return viewControllerArray.last
        }

        guard viewControllerArray.count > previousIndex else {
            return nil
        }

        return viewControllerArray[previousIndex]

    }

    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

        guard let viewControllerIndex = viewControllerArray.index(of: viewController) else {
            return nil
        }

        let nextIndex = viewControllerIndex + 1

        guard nextIndex < viewControllerArray.count else {
            return viewControllerArray.first
        }

        guard viewControllerArray.count > nextIndex else {
            return nil
        }

        return viewControllerArray[nextIndex]

    }

}

任何帮助将不胜感激!

0 个答案:

没有答案