2016-09-24 85 views
1

我试图从数组中加载适当的图像到我的UIPageViewController的视图中。 我有3个意见,我循环通过,以防止崩溃。在UIPageViewCotroller中检查后退/前进滚动时出现问题

我跟踪我是向前滚动还是向后滚动,但有时在快速向前和向后滚动时碰到了一个可以翻转方向的bug,并且我得到了几个滚动条重复的相同视图。

下面是当滚动完成

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代码的其余部分,更新局部变量指数函数:

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 
} 
+0

我认为你已经使这件事比它需要更复杂。只需在需要时分配一个新的视图控制器,并让旧版本发布。 – Paulw11

+0

@ Paulw11我试过了。因为我使用haneke swift来获取和缓存图像,所以当我刷过速时它实际上会导致崩溃。这是我可以找到的最简单的方法来防止这种崩溃。 – Xitcod13

+0

加载和提取图像不应与视图控制器的管理有关。你应该解决崩溃 – Paulw11

回答

0

我设法解决这个问题。我已经删除了pageViewController功能从UIPageControllerDelegate一个简单chaged我pageViewController功能在我的数据源,从得到的viewController指数像这样

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()) 
} 

和它的行为像它应该。

相关问题