与UITableView的初步比较
相同点:
- 都了通过datasource和delegate协议进行驱动。
- 性能上都实现了循环利用的优化。
不同点:
- UITableview 是系统自动布局,UICollectionView 是自定布局。
- UICollectionView 需要实现UICollectionViewLayout。
- 滚动方向不同。
- UICollectionView 只能通过注册确定重用标识符。
UICollectionView的结构
- Cells
- Supplementary Views 追加视图 (类似Header或者Footer)
- Decoration Views 装饰视图 (用作背景展示)
UICollectionViewLayoutAttributes类
包含了collection view内item的所有相关布局属性。默认情况下,这个类包含frame,center,size,transform3D,alpha,zIndex属性
UICollectionViewFlowLayout
UICollectionView的精髓所在是因为UICollectionViewFlowLayout。UICollectionViewFlowLayout主要负责UICollectionView的布局。UICollectionViewFlowLayout包含
@property (nonatomic) CGFloat minimumLineSpacing;
@property (nonatomic) CGFloat minimumInteritemSpacing;
@property (nonatomic) CGSize itemSize;
@property (nonatomic) CGSize estimatedItemSize NS_AVAILABLE_IOS(8_0); // defaults to CGSizeZero - setting a non-zero size enables cells that self-size via -preferredLayoutAttributesFittingAttributes:
@property (nonatomic) UICollectionViewScrollDirection scrollDirection; // default is UICollectionViewScrollDirectionVertical
@property (nonatomic) CGSize headerReferenceSize;
@property (nonatomic) CGSize footerReferenceSize;
@property (nonatomic) UIEdgeInsets sectionInset;
UICollectionViewLayout
理解布局的核心过程。
UICollectionViewLayout 直接影响这UICollectionView的整个布局信息。当UICollectionView第一次显示时都会访问layout对象,并提供布局信息给它。布局时过程如下:
prepareLayout 主要可以提前计算一些布局信息。
collectionViewContentSize 。返回collectionView 的contentSize。
- layoutAttributesForElementsInRect: 返回指定rect的所有cell的属性。
做删除和增加cell的动画
- initialLayoutAttributesForAppearingItemAtIndexPath:
- finalLayoutAttributesForDisappearingItemAtIndexPath:
上面方法新插入或者删除的元素并没有最初或最终状态来进行插值和动画。在此之前你可以利用prepareForCollectionViewUpdates:来做一些准备工作。或者利用finalizeCollectionViewUpdates 做一些结束工作。