2016-09-24 86 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()) 
} 

和它的行爲像它應該。

相關問題