继承UICollectionViewLayout
需要实现的核心任务:
1.指定滚动区域的尺寸
2.为布局中的每一个cell或view指定attribute对象,从而使collection view得到item的位置。
在布局过程中,使用collectionView属性从数据源获取数据。
理解核心布局过程
集合视图和布局对象协同工作,只要集合视图需要布局信息,就向布局对象询问。集合视图第一次出现,或者尺寸改变都会获取布局信息,可以显式调用invalidateLayout方法强制重新布局。
invalidateLayout与reloadData区别很大,重新布局不会刷新数据。在数据源中的数据变化时,reloadData才是合适的。
在布局过程中,集合视图调用了布局对象中的几个特定方法:
1.在prepareLayout方法中完成布局信息的预处理。
2.在collectionViewContentSize中基于预处理完成全部计算。
3.在layoutAttributesForElementsInRect:中返回设定好的attribute。
invalidateLayout方法并不会马上开始布局更新,仅仅标记了布局需要更新,在下一次视图更新循环中,集合视图发现布局需要更新时,才会更新布局。
生成布局属性
布局属性是UICollectionViewLayoutAttributes类的对象,使用以下方法生成布局属性:
1.layoutAttributesForCellWithIndexPath:
2.layoutAttributesForSupplementaryViewOfKind:withIndexPath:
3.layoutAttributesForDecorationViewOfKind:withIndexPath:
至少为布局属性设置尺寸和位置,zIndex用于防止重叠,isEqual:方法需要重写,集合视图调用用于某些计算。