1. UICollectionView
1.Cells
2.Supplementary Views 追加视图 (类似Header或者Footer)
3.Decoration Views 装饰视图 (用作背景展示)
1.1三个代理 :
1.DataSource 提供数据
2.Delegate 用户交互
3.CollectionViewLayout 布局
2. UICollectionViewLayout
2.1 UICollectionViewLayoutAttributes类的介绍:
1一个cell对应一个UICollectionViewLayoutAttributes对象
2.UICollectionViewLayoutAttributes对象决定了cell的摆设位置(frame)
@property (nonatomic) CGRect frame
@property (nonatomic) CGPoint center @property (nonatomic) CGSize size
@property (nonatomic) CATransform3D transform3D
@property (nonatomic) CGFloat alpha
@property (nonatomic) NSInteger zIndex @property (nonatomic, getter=isHidden) BOOL hidden
2.2 自定义的UICollectionViewLayout
需要重载在以下方法:
- (void)prepareLayout 准备方法被自动调用,以保证layout实例的正确。
- (CGSize)collectionViewContentSize 返回collectionView的内容的尺寸
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 1.返回rect中的所有的元素的布局属性 2.返回的是包含UICollectionViewLayoutAttributes的NSArray 3.UICollectionViewLayoutAttributes可以是cell,追加视图或装饰视图的信息,通过不同的UICollectionViewLayoutAttributes初始化方法可以得到不同类型的UICollectionViewLayoutAttributes: 1)layoutAttributesForCellWithIndexPath: 2)layoutAttributesForSupplementaryViewOfKind:withIndexPath: 3)layoutAttributesForDecorationViewOfKind:withIndexPath:
-(UICollectionViewLayoutAttributes )layoutAttributesForItemAtIndexPath:(NSIndexPath )indexPath 返回对应于indexPath的位置的cell的布局属性
- (UICollectionViewLayoutAttributes )layoutAttributesForSupplementaryViewOfKind:(NSString )kind atIndexPath:(NSIndexPath *)indexPath 返回对应于indexPath的位置的追加视图的布局属性,如果没有追加视图可不重载
- (UICollectionViewLayoutAttributes * )layoutAttributesForDecorationViewOfKind:(NSString)decorationViewKind atIndexPath:(NSIndexPath )indexPath 返回对应于indexPath的位置的装饰视图的布局属性,如果没有装饰视图可不重载
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds 当边界发生改变时,是否应该刷新布局。如果YES则在边界变化(一般是scroll到其他地方)时,将重新计算需要的布局信息。
2.3 调用顺序
1)- (void)prepareLayout 设置layout的结构和初始需要的参数等。
2) - (CGSize) collectionViewContentSize 确定collectionView的所有内容的尺寸。
3)- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect初始的layout的外观将由该方法返回的UICollectionViewLayoutAttributes来决定。4)在需要更新layout时,需要给当前layout发送 1)-invalidateLayout, 该消息会立即返回,并且预约在下一个loop的时候刷新当前layout 2)-prepareLayout, 3)依次再调用-collectionViewContentSize和-layoutAttributesForElementsInRect来生成更新后的布局。
继承UICollectionViewLayout之后只需要重载几个提供布局核心特性的方法,其他方法只需按情况重载即可,核心特性如下:
1 指定可滚动内容区域的size
2 为布局中的每个Cell及view提供属性对象
网友评论