首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在UIPageViewCotroller中检查后退/前进滚动时出现错误

在UIPageViewCotroller中检查后退/前进滚动时出现错误
EN

Stack Overflow用户
提问于 2016-09-24 09:36:27
回答 1查看 38关注 0票数 1

我正在尝试从一个数组中加载合适的图像到我的UIPageViewController的视图中,我有3个视图,为了防止崩溃,我循环浏览它们。

我会跟踪我是向前还是向后滚动,但有时当我非常快速地向前和向后翻转时,我会遇到一个bug,它会翻转方向,然后我会重复几次滚动,得到相同的视图。

下面是在滚动完成时更新局部变量index的函数

代码语言:javascript
复制
func pageViewController(pvc: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
     if completed {
                let thisPage = pvc.viewControllers!.last as! PageContentViewController
                let currentIndex = thisPage.pageIndex

                let lastIndex = lastPage.pageIndex
                  if(currentIndex > urlIndex){   
                    urlIndex += 1
                }else if(currentIndex < urlIndex) {
                    urlIndex -= 1
                }else{

                }
            }
        }

下面是我的UIPageViewController代码的其余部分:

代码语言:javascript
复制
 override func viewDidLoad() {
        super.viewDidLoad()
        dataSource = self
        delegate = self
}

   private(set) lazy var orderedViewControllers: [PageContentViewController] = {
    return [self.newPageContentViewController(),
            self.newPageContentViewController(),
            self.newPageContentViewController()
    ]
}()

private func newPageContentViewController() -> PageContentViewController {
    return UIStoryboard(name: "Main", bundle: nil) .
        instantiateViewControllerWithIdentifier("PageContentViewController") as! PageContentViewController
}

private func getNextViewController() -> PageContentViewController{

    let scrollView = orderedViewControllers.removeAtIndex(0)
    orderedViewControllers.append(scrollView)
    return scrollView
}

private func getPreviousViewController() -> PageContentViewController{

    let scrollView = orderedViewControllers.removeLast()
    orderedViewControllers.insert(scrollView, atIndex: 0)
    return scrollView
}

  func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{
    guard urlIndex > 0 else {
        return nil
    }

    let previousUrlIndex = urlIndex - 1


    return getViewControllerAtIndex(previousUrlIndex, next: false)
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?
{

    let nextUrlIndex = urlIndex + 1
    guard arrayRouteName.count > nextUrlIndex else{
        return nil
    }


    return getViewControllerAtIndex(nextUrlIndex, next: true)
}

func getViewControllerAtIndex(index: NSInteger, next: Bool) -> PageContentViewController
{

    // Create a new view controller and pass suitable data.
    var pageContentViewController:PageContentViewController
    if(next){
        pageContentViewController = getNextViewController()
    }else{
        pageContentViewController = getPreviousViewController()
    }
  pageContentViewController.localImage = arrayLocalImage[index]


    pageContentViewController.pageIndex = index
    pageContentViewController.view.clipsToBounds = true
    return pageContentViewController
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-22 08:43:29

我已经设法解决了这个问题。我已经从UIPageControllerDelegate中删除了pageViewController函数,并简单地更改了数据源中的pageViewController函数,以从viewController获取索引,如下所示

代码语言:javascript
复制
 func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?
{ 
let index = ((viewController as! UIPageContentViewController).pageIndex) - 1
guard index < 0 {
    return nil
}

return getViewControllerAtIndex(index, pageContentViewController: getPreviousViewController() ) 
}

它的行为就像它应该的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39671671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档