UICollectionView初涉

iOS6.0之后,提供了UICollectionView。与UITableView相似,但是也有很多不同。

1、首先需要引入除了UICollectionViewDelegate,UICollectionViewDataSource之外的UICollectionViewDelegateFlowLayout。

2、在创建实例的时候,要注意

UICollectionView *collectionView = [UICollectionView new];

这样生成会崩溃。必须是

//注意 UICollectionViewFlowLayout 不是UICollectionViewLayout。UICollectionViewFlowLayout是UICollectionViewLayout的子类。
UICollectionViewFlowLayout *collectionLayout = [UICollectionViewFlowLayout new];
UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout: collectionLayout];

UICollectionViewFlowLayout用来控制布局的。有一些常用的属性:

@property (nonatomic) CGFloat minimumLineSpacing;//每行的距离
@property (nonatomic) CGFloat minimumInteritemSpacing;//每个cell的距离
@property (nonatomic) CGSize itemSize;//每个cell的大小,如果每个cell的大小不一样,就不要设置这个属性。
@property (nonatomic) UIEdgeInsets sectionInset;//每个section的相对距离
@property (nonatomic) UICollectionViewScrollDirection scrollDirection;//视图滑动的方向

在创建完UICollectionView实例后,才能设置上面的属性。否则是无效的。

3、UICollectionView 也有UITableView一样的方法

- ( UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

在实现的时候,却是不同的。UICollectionViewCell不需要判断是否为空。在视图初始化的时候,必须注册Cell,系统生成在缓冲区中自动获取。
错误:

UICollectionViewCell *collectionCell = [UICollectionViewCell new];
if (! collectionCell)
 {
           collectionCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionCell"];
 }

正确:

UICollectionViewCell *collectionCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionCell"];

4、很多时候是需要自定义UICollectionViewCell。在重写创建方法的时候

-(id)init;//重写这个方法是无效的。不会调用重写的方法。

//应该使用-(id)initWithFrame:(CGRect)frame;

-(id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if(self)
    {
        //需要调用的方法。
    }
    return self;
}

自定义UICollectionViewFlowLayout一个新类,可以实现很多酷炫的动画。例如:引导页、轮播图、瀑布流视图...

你可能感兴趣的:(UICollectionView初涉)