2015-11-05 51 views
1

我有一個IOS應用程序,讓用戶刷過幾周的筆記。每週都是一個UIViewController - 視圖控制器之間的滑動和切換由UIPageViewController處理。許多視圖控制器 - 性能問題

在啓動時,所有的視圖控制器都會初始化其數據。

當用戶刷我GRAP這樣的視圖控制器:

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
    if let currentPageViewController = viewController as? SinglePageViewController { 
     let currentIndex = currentPageViewController.index 
     return self.weeks[currentIndex - 1] 
    } 
    return nil 
    } 

該應用程序工作無瑕疵,直到使用有許多周,由此許多視圖控制器。啓動時間開始成爲一個問題 - 隨着這幾周的進行,這種情況只會變得更糟。

我玩過每個視圖控制器初始化當用戶滑動。就像這樣:

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
     if let currentPageViewController = viewController as? SinglePageViewController { 
      let currentIndex = currentPageViewController.index 
      let newVC = SinglePageViewController() 
      newVC.index = currentIndex - 1 
      return newVC 
     } 
     return nil 
     } 

這種方法適用和啓動時間是偉大的 - 但是,刷卡現在已經變得遲緩和不順暢的。

任何人都可以建議如何解決這個問題?

+0

你可以嘗試設置它,一旦你的應用程序達到某個點(視圖控制器的數量),它開始回收舊的視圖控制器顯示未來幾周的筆記。 –

+1

而不是在你滑動時初始化視圖控制器,你應該在每個方向初始化一對,而不是僅僅是下一個。 – pbush25

+0

@ twist295,你有這樣的例子嗎? – Rasmus

回答

0

第二種方法(按需創建)是正確的方法。如果轉換變慢,那麼因爲你在init(),viewDidLoad,viewWillAppear等中花費了很多CPU時間......查看初始化並將每個CPU密集型任務移動到後臺線程。

如果您依賴數據來創建ViewController,那麼您必須預先預加載數據。但不需要預先加載超過2或3個數據的數據。如果花費很長時間並且仍然遇到性能問題,那麼您必須接受該設備的速度不足以滿足您的要求,並且必須向用戶提供加載指示符。 (如UIActivityIndi​​cator)

如果您在優化初始化方面需要幫助,請發佈您的代碼。

+0

偉大的建議 - 這解決了我的問題 – Rasmus

0

我有一個類似的問題,在UIScrollView中使用太多的UIScrollViews。我的解決方案是通過使用scrollViewDidScroll委託方法監視用戶在哪裏尋找,連接到我的容器滾動視圖,並根據用戶的滾動方向填充/刪除視圖。

您可以從方法中的let direction = scrollView.panGestureRecognizer.translationInView(scrollView.superview!)中獲取方向。

這種類型的方法適合你嗎?如果你願意,我可以給你更多的代碼!