之前开源了基于 UITableView 的注入方案 https://www.jianshu.com/p/b3605bc0aa29
由于公司用的 UICollectionView
并不多就没有继续支持 UICollectionView
方案实现。
2年过去了...
后续公司上线了小视频模块,基于瀑布流布局(CHTCollectionViewWaterfallLayout
),由于没有对应的AOP框架,广告同学要插入广告就只能跟业务代码耦合在一起了。。。
但是 用爽了 IMYAOPTableView
的广告同学,对这种耦合式的开发非常不适应,所以决定把 UICollectionView
的支持也做完下。 完成 Feeds 流页面 AOP 全家桶。
与 UITableView 的不同
核心原理类似,只是 UICollectionView 的 delegate 并不是固定的,而是基于各种 layout 有不同的回调...
目前方案内 支持 2种布局的 AOP,应该可以满足大部分页面的需求了
- 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
结尾
其他的好像也没啥好说的了。。
用法跟 UITableView 的注入一致,具体可以看项目中的 demo