如何使uipageviewcontroller进入圈子

我有一个显示不同页面的UIPageViewController。 目前的行为是当我到达最后一页时停止滚动。 我现在想要达到的是,当在最后一页,滚动权,它进入第一页。 在第一页时,当向左滚动时转到最后一页。 所以基本上让页面控制器显示在圆圈的页面。 我的第一种方法工作得很好,有多个页面,或者从一个页面开始:

- (UIViewController*) pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(TMCollectionViewController *)viewController { if((viewController.pageIndex) >= 1) { return _viewControllers[viewController.pageIndex - 1]; } else { if ([_viewControllers count] == 1) { return nil; } return [_viewControllers objectAtIndex:[_viewControllers count]-1]; } } 

但是,当我删除页面,只留下一个,它仍然记得之前或之后的页面,并相应地显示它。 即使数组中只剩下一个页面。 任何帮助,高度赞赏。

你可以实现它

当你在第一个索引,并向左滑动,使其索引=总页数

 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { NSUInteger index = ((PageContentViewController*) viewController).pageIndex; if ((index == 0) || (index == NSNotFound)) { index = self.pageTitles.count; } index--; return [_viewControllers objectAtIndex:index]; } 

当你在最后的索引设置为零索引

 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { NSUInteger index = ((PageContentViewController*) viewController).pageIndex; if (index == NSNotFound) { return nil; } index++; if (index == [self.pageTitles count]) { index = 0; } return [_viewControllers objectAtIndex:index]; } 

谢谢,@Roshni

Swift 2 – Roshni的解决scheme

 func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { var index: Int = (viewController as! PageContentViewController).index if index == 0 || index == NSNotFound { index = self.pageTitles.count } index-- return viewControllerAtIndex(index) } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { var index: Int = (viewController as! PageContentViewController).index if index == NSNotFound { return nil } index++ if index == self.pageTitles.count { index = 0 } return viewControllerAtIndex(index) } 

这里是样本,我做了循环分页

我正在使用使用UIPageViewController创build一个内容滑块(Objective-C / Swift)文章,但是感谢@Tom Calmon和@Roshani现在我能够在Swift 2.2上实现我想要的结果

 class PageHomeViewController: UIViewController , UIPageViewControllerDataSource{ // MARK: - Variables private var pageViewController: UIPageViewController? // Initialize it right away here private let contentImages = ["nature_pic_1.png", "nature_pic_2.png", "nature_pic_3.png", "nature_pic_4.png"]; //MARK: - View controller life cycle methods override func viewDidLoad() { super.viewDidLoad() createPageViewController() setupPageControl() } //MARK: - Create and start page view controller private func createPageViewController() { let pageController = self.storyboard!.instantiateViewControllerWithIdentifier("PageViewController") as! UIPageViewController pageController.dataSource = self if contentImages.count > 0 { let firstController = getItemController(0)! let startingViewControllers: NSArray = [firstController] pageController.setViewControllers(startingViewControllers as? [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) } pageViewController = pageController addChildViewController(pageViewController!) self.view.addSubview(pageViewController!.view) pageViewController!.didMoveToParentViewController(self) } private func setupPageControl() { let appearance = UIPageControl.appearance() appearance.pageIndicatorTintColor = UIColor.grayColor() appearance.currentPageIndicatorTintColor = UIColor.whiteColor() appearance.backgroundColor = UIColor.darkGrayColor() } // MARK: - UIPageViewControllerDataSource func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { var index: Int = (viewController as! PageContentViewController).itemIndex if index == 0 || index == NSNotFound { index = contentImages.count } index -= 1 return getItemController(index) } func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?{ var index: Int = (viewController as! PageContentViewController).itemIndex if index == NSNotFound {return nil} index += 1 if index == contentImages.count {index = 0} return getItemController(index) } private func getItemController(itemIndex: Int) -> PageContentViewController? { if itemIndex < contentImages.count { let pageItemController = self.storyboard!.instantiateViewControllerWithIdentifier("PageContentViewController") as! PageContentViewController pageItemController.itemIndex = itemIndex pageItemController.imageName = contentImages[itemIndex] return pageItemController } return nil } // MARK: - Page Indicator func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { return contentImages.count } func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { return 0 } } 

在这里输入图像说明

希望这将有助于那里有人,有一天!