TABAnimated 瀑布流適配方案
前言
最近有不少小伙伴,希望TABAnimated適配瀑布流。
本文將說明瀑布流適配方案和使用方式
適配原理
瀑布流是一種自定義UICollectionViewLayout,計算規則是不需要TABAnimated所關心的。
但是為了提供一套瀑布流機制,通常開發者會通過代理,給到使用方,比如高度,每行幾個row。
基本原理
這里設計到兩種策略選擇。
一種是瀑布流布局私有化,開發者需要使用TABAnimated內置的瀑布流計算方式。這個因為需要開發者修改源代碼,所以沒有考慮。
第二種是開發者將瀑布流SEL傳遞給TABAnimated,TABAnimated切面管理動畫時的瀑布流,不關心你們的瀑布流計算方式
但是,這個方法存在弊端,需要開發者的瀑布流高度代理,參數嚴格按照瀑布流布局對象,視圖下標,視圖寬度,依次排列,不可缺少不可更換位置。
命名可以隨意。
_collectionView.tabAnimated.waterLayoutHeightSel = @selector(waterFallLayout:heightForItemAtIndexPath:itemWidth:);
如何使用
使用animatedWaterFallLayoutWithCellClass初始化接口。
傳入class類型,高度列表和SEL
CGFloat height = CardCollectionViewCell.cellSize.height+50;
NSArray <NSNumber *> heightArray = @[@(height), @(height+20), @(height+20), @(height+20), @(height+20), @(height+20), @(height+20), @(height+20)];
TABCollectionAnimated *tabAnimated = [TABCollectionAnimated animatedWaterFallLayoutWithCellClass:CardCollectionViewCell.class
heightArray:heightArray
heightSel:@selector(waterFallLayout:heightForItemAtIndex:itemWidth:)];
注意
demo中內置了瀑布流樣例,樣例使用了外部的瀑布流布局,框架內不提供該布局。