ZLCollectionViewFlowLayout.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. //
  2. // ZLCollectionViewFlowLayout.h
  3. // ZLCollectionView
  4. //
  5. // Created by zhaoliang chen on 2017/6/22.
  6. // Copyright © 2017年 zhaoliang chen. All rights reserved.
  7. #import <UIKit/UIKit.h>
  8. #import "ZLCollectionReusableView.h"
  9. /**
  10. * 当前版本 v0.8.4
  11. * ------ 修改内存泄漏
  12. **/
  13. typedef enum {
  14. //BaseLayout = 1, //基础布局。 用苹果默认的UICollectionView的布局,不去改变。
  15. LabelLayout = 1, //标签页布局。 一堆label标签的集合
  16. ClosedLayout = 2, //列布局 指定列数,按列数来等分一整行,itemSize的width可以任意写,在布局中会自动帮你计算。可用于瀑布流,普通UITableViewCell
  17. PercentLayout = 3, //百分比布局 需实现percentOfRow的代理,根据设定值来计算每个itemSize的宽度
  18. FillLayout = 4, //填充式布局 将一堆大小不一的view见缝插针的填充到一个平面内,规则为先判断从左到右是否有间隙填充,再从上到下判断。
  19. AbsoluteLayout = 5, //绝对定位布局 需实现rectOfItem的代理,指定每个item的frame
  20. } ZLLayoutType;
  21. @class ZLCollectionViewFlowLayout;
  22. @protocol ZLCollectionViewFlowLayoutDelegate <NSObject>
  23. @optional
  24. //指定是什么布局,如没有指定则为BaseLayout(基础布局)
  25. - (ZLLayoutType)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout typeOfLayout:(NSInteger)section;
  26. /**同基础UICollectionView的代理设置**/
  27. - (CGSize)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
  28. - (CGSize)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section;
  29. - (CGSize)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section;
  30. - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section;
  31. - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section;
  32. - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section;
  33. /******** 设置每个section的背景色 ***********/
  34. //设置每个section的背景色
  35. - (UIColor*)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout backColorForSection:(NSInteger)section;
  36. //自定义每个section的背景view,需要继承UICollectionReusableView,返回类名
  37. - (NSString*)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout registerBackView:(NSInteger)section;
  38. //对section背景进行一些操作
  39. - (void)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout loadView:(NSInteger)section;
  40. //背景是否延伸覆盖到headerView,默认为NO
  41. - (BOOL)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout attachToTop:(NSInteger)section;
  42. /******** 提取出UICollectionViewLayoutAttributes的一些属性 ***********/
  43. //设置每个item的zIndex,不指定默认为0
  44. - (NSInteger)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout zIndexOfItem:(NSIndexPath*)indexPath;
  45. //设置每个item的CATransform3D,不指定默认为CATransform3DIdentity
  46. - (CATransform3D)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout transformOfItem:(NSIndexPath*)indexPath;
  47. //设置每个item的alpha,不指定默认为1
  48. - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout *)collectionViewLayout alphaOfItem:(NSIndexPath*)indexPath;
  49. /******** ClosedLayout列布局需要的代理 ***********/
  50. //在ClosedLayout列布局中指定一行有几列,不指定默认为1列
  51. - (NSInteger)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout*)collectionViewLayout columnCountOfSection:(NSInteger)section;
  52. /******** PercentLayout百分比布局需要的代理 ***********/
  53. //在PercentLayout百分比布局中指定每个item占该行的几分之几,如3.0/4,注意为大于0小于等于1的数字。不指定默认为1
  54. - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout*)collectionViewLayout percentOfRow:(NSIndexPath*)indexPath;
  55. /******** AbsoluteLayout绝对定位布局需要的代理 ***********/
  56. //在AbsoluteLayout绝对定位布局中指定每个item的frame,不指定默认为CGRectZero
  57. - (CGRect)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout*)collectionViewLayout rectOfItem:(NSIndexPath*)indexPath;
  58. /******** 拖动cell的相关代理 ***************************/
  59. - (void)collectionView:(UICollectionView *)collectionView layout:(ZLCollectionViewFlowLayout*)collectionViewLayout didMoveCell:(NSIndexPath*)atIndexPath toIndexPath:(NSIndexPath*)toIndexPath;
  60. @end
  61. @interface ZLCollectionViewFlowLayout : UICollectionViewFlowLayout
  62. @property (nonatomic,assign) id<ZLCollectionViewFlowLayoutDelegate> delegate;
  63. @property (nonatomic,assign) BOOL isFloor;//宽度是否向下取整,默认YES,用于填充布局,未来加入百分比布局
  64. @property (nonatomic,assign) BOOL canDrag; //是否允许拖动cell,默认是NO
  65. @property (nonatomic,assign) BOOL header_suspension; //头部是否悬浮,默认是NO
  66. @property (nonatomic,assign) ZLLayoutType layoutType; //指定layout的类型,也可以在代理里设置
  67. @property (nonatomic,assign) NSInteger columnCount; //指定列数
  68. @end