之前開源了基于 UITableView 的注入方案 http://www.reibang.com/p/b3605bc0aa29
由于公司用的 UICollectionView
并不多就沒有繼續(xù)支持 UICollectionView
方案實現(xiàn)。
2年過去了...
后續(xù)公司上線了小視頻模塊奢赂,基于瀑布流布局(CHTCollectionViewWaterfallLayout
),由于沒有對應(yīng)的AOP框架染坯,廣告同學(xué)要插入廣告就只能跟業(yè)務(wù)代碼耦合在一起了刨秆。。。
但是 用爽了 IMYAOPTableView
的廣告同學(xué)恍箭,對這種耦合式的開發(fā)非常不適應(yīng),所以決定把 UICollectionView
的支持也做完下瞧省。 完成 Feeds 流頁面 AOP 全家桶扯夭。
與 UITableView 的不同
核心原理類似,只是 UICollectionView 的 delegate 并不是固定的鞍匾,而是基于各種 layout 有不同的回調(diào)...
目前方案內(nèi) 支持 2種布局的 AOP交洗,應(yīng)該可以滿足大部分頁面的需求了
- UICollectionViewDelegateFlowLayout,
- CHTCollectionViewDelegateWaterfallLayout
但是 podspec 中并沒有 依賴 CHTCollectionViewDelegateWaterfallLayout
,工程中是如何檢測的橡淑?
其實是利用了 __has_include
宏
#if __has_include(<CHTCollectionViewWaterfallLayout/CHTCollectionViewWaterfallLayout.h>)
#import <CHTCollectionViewWaterfallLayout/CHTCollectionViewWaterfallLayout.h>
#define _has_chtwaterfall_layout_ 1
#else
#define _has_chtwaterfall_layout_ 0
#endif
#if _has_chtwaterfall_layout_
@protocol IMYAOPCollectionViewDelegate <UICollectionViewDelegateFlowLayout, CHTCollectionViewDelegateWaterfallLayout>
#else
@protocol IMYAOPCollectionViewDelegate <UICollectionViewDelegateFlowLayout>
#endif
結(jié)尾
其他的好像也沒啥好說的了构拳。。
用法跟 UITableView 的注入一致梳码,具體可以看項目中的 demo