我們有一個UICollectionView,其自定義佈局與UITableView非常相似(它垂直滾動)。所述UICollectionView同時僅顯示3細胞,用它們中的一個作爲當前激活的細胞:(這裏的活動單元格是#2)在UICollectionView/UITableView中設置scrollView的偏移量會導致過早消失的單元格
[ 1 ]
[*2*]
[ 3 ]
的細胞是大致280點高,所以只有活動小區是充分在屏幕上可見。用戶不直接滾動視圖進行導航,而是水平滑動活動單元格以前進到下一個單元格。然後,我們做一些花哨的動畫和滾動UICollectionView所以下一個單元是在「主動」地位,從而使其成爲活躍之一,移動舊的路程,造就下一個單元格中的隊列:
[ 2 ]
[*3*]
[ 4 ]
這裏的問題是設置UICollectionView的偏移量。我們目前將它設置在一個UIView動畫塊(self.collectionView.contentOffset = targetOffset;
)以及其他三個動畫屬性中,這些屬性通常很好,但是會導致第一個單元(前一個活動的單元,後一種情況下爲#2)在動畫一消失甚至在延遲間隔完成之前開始運行。這絕對不是理想的。
我想過一些解決方案,但不能找出最好的一個:
荒謬擴大UICollectionView的框架,以適應五個格,而不是三個,這樣就可以迫使保持細胞記憶即使他們在屏幕外。我已經嘗試過這一點,它的工作原理,但它聽起來像一個非常骯髒的黑客。
拍攝消失的單元格的渲染內容的快照,將其放入UIImageView中,將該UIImageView添加爲scrollView的子視圖,就在該單元格離開舊單元格的完全相同位置之前,將其刪除一旦動畫結束。聽起來不像以前的選擇那麼糟糕(至少在記憶方面),但還是有點不好意思。我也不知道完成這件事的最佳方法,請指出我的方向。
-
切換到UIScrollView的
setContentOffset:animated:
。我們實際上已經習慣了這一點,並且它修復了消失的單元問題,但是與其他UIView動畫並行運行顯然會引起主線程的注意,從而在單核設備(iPhone 3GS/4)。它也不允許我們改變動畫的持續時間或緩動,所以感覺與其他動作不同步。如果我們可以找到一種方法使其與UIView塊動畫協調工作,那麼仍然是一個選項。切換到UICollectionView的
scrollToItemAtIndexPath:atScrollPosition:animated:
。還沒有嘗試過,但它有一個很大的缺點:對於目標滾動位置:UICollectionViewScrollPositionTop
,UICollectionViewScrollPositionCenteredVertically
和UICollectionViewScrollPositionBottom
只需要3個可能的常量(至少適用於這種情況)。活動單元格可以改變其高度,但它始終必須距離窗口頂部35個點,並且這些選項不能提供足夠的控制來完成設計。它也可能與3.1一樣有問題。仍然是一個選擇,因爲可能有辦法繞過滾動位置的東西,我不知道,它可能不會有與主線程相同的問題,這似乎不太可能。
任何幫助將不勝感激。請詢問是否需要澄清。非常感謝!
感謝您的回答。原來,這個區塊已經有了這個選擇,似乎沒有什麼區別。 – radutzan
這也沒有幫助我。 –