//它是官方提供的一种瀑布流效果
UICollectionViewFlowLayout*flowLayout = [[UICollectionViewFlowLayoutalloc]init];
//不同于tableView,它用item进行显示,所以需要先设置每个item有多大
flowLayout.itemSize=CGSizeMake(80,160);
// //设置行间距
// flowLayout.minimumLineSpacing = 2;
// //设置列间距
// flowLayout.minimumInteritemSpacing = 100;
//设置滚动方向,默认是垂直方向
// flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
flowLayout.headerReferenceSize=CGSizeMake(0,300);
// flowLayout.footerReferenceSize = CGSizeMake(0, 300);(如果写了就必须注册)
//创建一个collectionView
UICollectionView*collectionView = [[UICollectionViewalloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)collectionViewLayout:flowLayout];
//接下来就是和tableview很相似,使用前需要签订两个协议,dataSource ,delegate
collectionView.delegate=self;
collectionView.dataSource=self;
[self.viewaddSubview:collectionView];
[collectionViewrelease];
//通过注册的方式创建cell
//第一个参数:需要制定注册对象的类型
//第二个参数:重用标志
[collectionViewregisterClass:[myCellclass]forCellWithReuseIdentifier:@"reuse"];
//这侧一个头视图
[collectionViewregisterClass:[myCollectionReusableViewclass]forSupplementaryViewOfKind:UICollectionElementKindSectionHeaderwithReuseIdentifier:@"headerView"];
//第一个参数:需要注册的对象类型
//第二个参数:指定头视图还是尾视图,常量字符串在系统的UICollectionViewFlowlayout类的最上面
//第三个参数:重用标志
[selfcreatData];
两个必须实现的协议方法
- (NSInteger)collectionView:(UICollectionView*)collectionView numberOfItemsInSection:(NSInteger)section{
returnself.arr.count;
}
// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
#warning使用注册的方式创建的cell,必须用自定义的cell,否则在里面会重复大量的创建视图,为了杜绝重复创建,必须使用自定义的的cell
- (UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath{
#warning在collectionViewCell的创建的时候,提供了另外一种不同于tableviewCell的创建方式
myCell*cell = [collectionViewdequeueReusableCellWithReuseIdentifier:@"reuse"forIndexPath:indexPath];
//只要通过注册的方式创建的cell,在取值的时候就不需要在进行是否为空的判断
cell.contentView.backgroundColor= [UIColoryellowColor];
cell.titleLabel.text= [NSStringstringWithFormat:@"%ld",indexPath.row];
[cell.myImageViewsd_setImageWithURL:[NSURLURLWithString:self.arr[indexPath.row]]];
returncell;
}
******************************************************************************************
自定义的cell需要重写初始化方法
- (instancetype)initWithFrame:(CGRect)frame{
self= [superinitWithFrame:frame];
if(self) {
self.myImageView= [[UIImageViewalloc]initWithFrame:CGRectMake(0,0,80,160)];
[self.contentViewaddSubview:self.myImageView];
[_myImageViewrelease];
self.titleLabel= [[UILabelalloc]initWithFrame:CGRectMake(0,100,80,30)];
[self.contentViewaddSubview:self.titleLabel];
[_titleLabelrelease];
}
returnself;
}
********************************************************************************
//头视图,尾视图
- (UICollectionReusableView*)collectionView:(UICollectionView*)collectionView viewForSupplementaryElementOfKind:(NSString*)kind atIndexPath:(NSIndexPath*)indexPath{
if([kindisEqualToString:UICollectionElementKindSectionHeader]) {
myCollectionReusableView*view = [collectionViewdequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeaderwithReuseIdentifier:@"headerView"forIndexPath:indexPath];
view.myLabel.text=@"11111";
returnview;
}else{
returnnil;
}
}
使用头视图和尾视图需要自定一个视图
使用UICollectionReusableView
- (instancetype)initWithFrame:(CGRect)frame{
self= [superinitWithFrame:frame];
if(self) {
//创建子视图
self.myLabel= [[UILabelalloc]init];
self.myLabel.backgroundColor= [UIColoryellowColor];
[selfaddSubview:self.myLabel];
[_myLabelrelease];
}
returnself;
}