0

我在UIPageViewController中使用UICollectionView
每個頁面都是UICollectionViewController的相同子類的實例。 每當我進行頁面滑動以查看我之前沒有看到的頁面時,由於UICollectionView需要遍歷所有代理/數據源方法,動畫會得到一個小的延遲(幾毫秒)以啓動。 所以我試圖在用戶實際開始滑動之前實現預緩存系統來加載視圖控制器。
我可以很容易地創建它,但由於某種原因,只要我在不可見的ViewController上調用reloadData,就不會調用任何UICollectionViewDelegateFlowLayout委託方法。
到目前爲止,我試圖使用:setNeedsDisplay,setNeedsLayout,setLayoutIfNeededinvalidateLayout強制他們被調用,但沒有任何工作。
viewcontroller不是nilview不是nil
有誰知道可能是什麼原因?是否因爲視圖控制器不在視口中?在UIPageViewController中預加載UICollectionView

+0

同意Antzi答案,您應該預先緩存數據而不是UI。 –

+0

如果主要瓶頸'sizeForItemAtIndexPath'及其中的所有計算都基於您的模型,那麼只要您的模型可用並將這些值傳遞給數組,那麼您是否可以不直接進行這些計算? – beyowulf

+0

我試過這個解決方案,但它看起來還不足以避免延遲。 – pasine

回答

1

首先加載視圖控制器可能不是最好的主意。

您應該緩存數據源。

關於reloadData無法正常使用未顯示的控制器,您是對的,這是因爲控制器不存在。

+0

主要瓶頸是'sizeForItemAtIndexPath'。這個方法被所有單元調用(即使那些不可見),並且是一個'UICollectionViewDelegateFlowLayout'方法。 – pasine

+0

你能告訴我們你的牢房裏有什麼? – Antzi

+0

文字和圖像。所以每個細胞的高度是可變的。 – pasine

0

代表將不火,除非觀點是visible.To對付你面對你將不得不溝的CollectionView和使用的CollectionView控制器和孩子添加這些的CollectionView控制器頁面控制器

注延遲:爲每個收集控制器設置適當的框架

CollectionController *collectionController = [self.storyboard instantiateViewControllerWithIdentifier:@"Calculate"]; 
     [self addChildViewController:collectionController]; 
     collectionController.view.frame = self.calculationView.bounds; 
     [self.pageControllerView addSubview:collectionController.view]; 
     [collectionController didMoveToParentViewController:self];