人生活在世上只有短短的几十年,却浪费了很多的时间去想许多半年内就会被遗忘的小事。实际上,世界上有的伤心事都是由一些小事引起的,诸如一点小小的伤害、一丝小小的屈辱等等。有意思的是,那些在图书馆、实验室从事研究工作的人很少因忧虑而精神崩溃,因为他们没有时间享受这种奢侈。忧虑最能伤害你的时候,不是在你行动时,而是在你悠闲的时候

效果展示 :

1、简述

这里使用的是UICollectionView来实现的这种效果

2、storyboard与自定义cell方式实现

基本实现思路是:使用storyboard布局方式(结合自定义CellView)来实现列表展示数据

2.1 首先定义storyboard文件中的内容

在这里,我们在主视图中直接拖入一个UICollcetionView控件,其实它就相当一个容器,同时它会被默认设置一种流水方式的布局格式 UICollectionViewFlowLayout

在对应的主视图控制器中分别设置 对应的UICollectionView 和UICollcetionViewFlowLayout的引用

2.2、自定义CellView展示条目

创建AppCell.h文件 ,继承于UICollcetionViewCell

在AppCell.m文件中实现初始化方法

#import "AppCell.h"@implementation AppCell-(instancetype)initWithFrame:(CGRect)frame{if (self = [super initWithFrame:frame]) {//1、获取Cell的SizeCGSize cellSize = self.contentView.frame.size;//2、添加一个显示标题的Title//2.1、创建LabelUILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, cellSize.width, 20)];//2.2、设置默认显示标题titleLabel.text=@"神奇的小镇";//2.3、添加到Cell中去[self.contentView addSubview:titleLabel];//3、添加一个ImageView显示图片//3.1、创建ImageViewUIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(0,25, cellSize.width, cellSize.height-25)];//3.2、设置默认显示的图片imageView.image = [UIImage imageNamed:@"aqs"];//3.3、添加到Cell中[self.contentView addSubview:imageView];}return self;
}

可以看到在这个自定义的Cell中,添加了一个用于显示图片的UIImageView 和一个用于显示文字标题的UILabel,也就是说当我们的条目内容比较复杂的时候,可以使用这种方式来设置添加

2.3、设置视图显示

#import "ViewController.h"
#import "AppCell.h"@interface ViewController ()<UICollectionViewDataSource>//对应storyboard中的UICollcetionView
@property (weak, nonatomic) IBOutlet UICollectionView *mainCollectionView;
//对应storyboard中UICollectionView 中的流水布局FlowLayout
@property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *mainFlowLayout;@end
//重用标识符
static NSString *ident=@"cell";@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//设置代理self.mainCollectionView.dataSource = self;//注册Cell[self.mainCollectionView registerClass:[AppCell class] forCellWithReuseIdentifier:ident];//设置Item的大小self.mainFlowLayout.itemSize = CGSizeMake(self.view.frame.size.width-20, 200);}//组
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{return 1;
}
//列
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{return 30;
}//视图
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{AppCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:ident forIndexPath:indexPath];if (cell == nil) {cell = [[AppCell alloc]init];}cell.backgroundColor = [UIColor colorWithRed:248 green:248 blue:248 alpha:1];return cell;
}@end

2.3.1 视图引用

首先在这里定义声明了mainCollectionView引用 和 mainFlowLayout引用,其分别指向第一步中创建的storyboard文件中的UICollectionView 与UICollectionView中对应的流水布局UICollectionViewFlowLayout

每一个UICollectionView必然对应一个布局方式,其指定了UICollectionView中的Item的排列方式

在这里默认设置了UICollectionViewFlowLayout流水式布局方式

2.3.2 UICollectionView的相关设置

在4.1中我们谈到在storyboard中默认设置了一个流水布局方式,如果我们是在使用代码创建,那么必须定义设置一种布局方式,否则会抛出异常;

同时也必须将UICollectionView中对应的Cell条目类型进行注册,否则会抛出指定异常

在上面我们还设置了UICollectionView的条目显示大小 ,如果不进行设置,那么其默认显示大小 为 50 X 50

2.3.3 UICollectionView分组支持

UICollcetionView同时支持分组显示功能 ,与UITableView的功能相似

3、storyboard与自定义xib方式实现

使用UICollectionView 与 自定义xib方式来实现的列表展示

其次这里使用的是storyboard文件方式定义规划的布局

3.1 自定义条目Cell 对应的XIB文件

3.1.1  在xib文件中,对应了控制器AppCell

3.1.2 xib文件中分别设置规划了一个用于显示图片的UIImageView 和一个用于显示图片标题的 UILabel

3.1.3  对应的控制器中也设置了相应的控件引用

AppCell.h 中

#import "AppCell.h"@interface AppCell ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;@end@implementation AppCell- (void)awakeFromNib {[super awakeFromNib];// Initialization code
}-(void)setImagPath:(NSString *)imagPath{_imagPath = imagPath;//设置ImageViewself.imageView.image = [UIImage imageNamed:imagPath];//设置显示标题self.titleLabel.text = @"this is a text";
}@end

可以看到在这里重写了imagPath的set方法,也就是说当调用appCell.imagPath时候,会执行到setImagPath方法,在这个方法中就将对应的数据设置显示到对应的控件上。

3.2 UICollectionView的相关设置

#import "ViewController.h"
#import "AppCell.h"@interface ViewController ()<UICollectionViewDataSource>
//对应storyboard中的UICollcetionView
@property (weak, nonatomic) IBOutlet UICollectionView *mainCollcetionView;
//对应storyboard中UICollectionView 中的流水布局FlowLayout
@property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *mainFlowLayout;@end//cell重用标识符
static NSString *ident=@"cell";@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//设置Item的大小self.mainFlowLayout.itemSize = CGSizeMake(self.view.frame.size.width-20, 180);//设置代理self.mainCollcetionView.dataSource = self;//注册CellUINib *cellNib = [UINib nibWithNibName:@"AppCell" bundle:nil];[self.mainCollcetionView registerNib:cellNib forCellWithReuseIdentifier:ident];}//组
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{return 1;
}
//列
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{return 30;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{AppCell *cell =[collectionView dequeueReusableCellWithReuseIdentifier:ident forIndexPath:indexPath];if (cell == nil) {cell = [[AppCell alloc]init];}//设置背景cell.backgroundColor = [UIColor colorWithRed:248 green:248 blue:248 alpha:1];//设置显示数据cell.imagPath = @"aqs";return cell;
}@end

3.2.1 我们在使用UICollectionView的时候必须要对条目CellView进行注册设置,而在这里,则是先获取对应的UINib,然后再调用UINib对应的方法对其进行注册

3.2.2 在cellForItemAtIndexPath方法中,我们调用方法 cell.imagPayh 并对其进行赋值操作,会调用到AppCell对应的setImagPath方法,进行对相应的控件进行了赋值操作

4、代码方式创建 UICollectionView 与 自定义Cell

这里使用的是代码方式创建 UICollectionView 与 自定义Cell

4.1 代码方式创建自定义Cell

AppCell.h

#import <UIKit/UIKit.h>@interface AppCell : UICollectionViewCell@end

AppCell.m

#import "AppCell.h"@implementation AppCell
-(instancetype)initWithFrame:(CGRect)frame{if (self=[super initWithFrame:frame]) {//1、获取Cell的SizeCGSize cellSize = self.contentView.frame.size;//2、初始化一个ImageViewUIImageView *imageView =[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, cellSize.width, cellSize.height-20)];//3、设置默认显示图片imageView.image = [UIImage imageNamed:@"aqs"];//4、将ImageView添加到Cell视图中去[self.contentView addSubview:imageView];//5、创建UILabel显示图片的名称UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, cellSize.height-20, cellSize.width, 20)];//6、设置显示默认的文字titleLabel.text = @"图片";//7、将label添加到Cell中[self.contentView addSubview:titleLabel];}return self;
}@end

需要注意的是,在这里AppCell要继承于UICollectionViewCell

在initWithFrame方法中初始化相应的控件并设置其布局位置与大小以及默认显示的数据

4.2 代码方式创建UICollectionView

在对应的显示显示页面的控制器中

#import "ViewController.h"
#import "AppCell.h"@interface ViewController ()<UICollectionViewDataSource>@end//定义Cell重用标识符
static NSString *ident = @"cell";
@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//1、实例化一个流水布局UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];//1-1、设置Cell大小flowLayout.itemSize= CGSizeMake(self.view.frame.size.width-30, 100);//1-2、设置四周边距flowLayout.sectionInset = UIEdgeInsetsMake(10, 15, 10, 15);//1-3、设置最小列之间的距离flowLayout.minimumLineSpacing = 10;//1-4、设置最小行之间的距离flowLayout.minimumLineSpacing = 20;//2、实例化创建一个 UICollectionView//UICollectionView必须有一个 flowLayout ,必须在实例化的时候进行设置UICollectionView  *collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout];//3、设置背景为白色collectionView.backgroundColor = [UIColor whiteColor];//4、设置数据源代理collectionView.dataSource = self;//添加到视图中[self.view addSubview:collectionView];//注册Cell视图[collectionView registerClass:[AppCell class] forCellWithReuseIdentifier:ident];
}//组
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{return 1;
}
//列
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{return 30;
}
//子View
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{AppCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:ident forIndexPath:indexPath];if (cell==nil) {cell = [[AppCell alloc]init];}return cell;
}@end

4.2.1 值得注意的是每一个UICollectionView 必然对应着一个布局方式 ,也就是说在创建UICollectionView的时候,必须指定相应的布局方式,在这里,我们首先创建了UICollectionViewFlowLayout流水布局方式,然后在后续中指向于UICollcetionView的创建

4.2..2 必须要注册UICollectionView 条目中使用到的Cell

5、UICollectionViewController方式来实现视图的横向滑动

<图片来源 黑马>

5.1 主视图对应的storyboard文件中

5.1.1  在这里,显示视图中直接布局UICollectionViewController,同时指向一个控制器,在控制中设置 UICollectionView 与UICollectionViewFlowLayout的引用

5.1.2  同时设置其中的Cell ,在这里添加了一个用于显示图片的UIImageView 与显示文字 标识的UILabel ,并设置引用相对应的控制器

5.2 自定义条目AppCell

AppCell.h

#import <UIKit/UIKit.h>@interface AppCell : UICollectionViewCell@property(copy,nonatomic) NSString *images;
@property(copy,nonatomic) NSString *indexs;@end

AppCell.m

#import "AppCell.h"@interface AppCell ()//Cell 中对应显示图片的控件 UIImageView
@property (weak, nonatomic) IBOutlet UIImageView *image;
//Cell 中对应显示文字的控件 UILabel
@property (weak, nonatomic) IBOutlet UILabel *lable;@end@implementation CellViewCollectionViewCell-(void)setImages:(NSString *)images{//设置显示图片UIImage *image = [UIImage imageNamed:images];_image.image = image;
}-(void)setIndexs:(NSString *)indexs{//设置显示对应文字标识 _lable.text = indexs;
}@end

在这里AppCell继承于UICollectionViewCell,其中定义的 images 与 indexs 分别为Cell对应的图片地址与文字说明

在AppCell.m中重写images 与 index  的set的方法,当在外界通过点语法来对其进行赋值操作的同时,赋值于控件。

5.3 主视图对应的控制器

ViewController.h

#import <UIKit/UIKit.h>@interface ViewController : UICollectionViewController@end

ViewController.m

#import "ViewController.h"
#import "AppCell.h"@interface ViewController ()<UICollectionViewDataSource>//对应视图中的UICollectionView 中的默认流水布局
@property (weak, nonatomic) IBOutlet UICollectionViewFlowLayout *flowlayout;
//对应视图中的UICollectionView
@property (weak, nonatomic) IBOutlet UICollectionView *collectionViews;//图片路径数据源
@property(nonatomic,strong) NSArray *dataArray;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];//设置背景self.collectionView.backgroundColor = [UIColor whiteColor];//设置大小_flowlayout.itemSize = self.view.bounds.size;//代理self.collectionView.dataSource =self;// 修改滚动方向_flowlayout.scrollDirection =  UICollectionViewScrollDirectionHorizontal;// 设置 行间距_flowlayout.minimumLineSpacing = 0;// 隐藏滚动条_collectionViews.showsHorizontalScrollIndicator = NO;// 设置分页效果_collectionViews.pagingEnabled = YES;// 设置弹簧效果_collectionViews.bounces =  NO;}-(NSArray *)dataArray{if (_dataArray==nil) {// 创建临时数组NSMutableArray *mutable = [NSMutableArray array];// 加载所有图片for (int i = 0; i < 9; i++) {// 拼接图片名称NSString *imageName = [NSString stringWithFormat:@"%d.jpg",i];[mutable addObject:imageName];}// 赋值_dataArray = mutable;}return _dataArray;}//
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{return 10;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{AppCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"aa" forIndexPath:indexPath];// 取出图片cell.images = self.dataArray[indexPath.item];cell.indexs = [NSString stringWithFormat:@"%lu",indexPath.row];return cell;
}@end

5.3.1 主视图的控制器继承于UICollectionViewController

5.3.2 在这里我们设置了UICollectionView的背景颜色为白色,UICollectionView的默认背景颜色是黑色

5.3.3 同时我们设置了 视图中UICollectionView对应的流水布局相应Item的size为UICollectionView的size,而在这里,UICollectionView为全屏,

5.3.4 通过设置UICollection的布局UICollectionViewFlowLayout的滚动方式 scrollDirection 为垂直滚动

UICollectionViewScrollDirectionVertical  为垂直方向滚动,默认方式

UICollectionViewScrollDirectionHorizontal 为水平方向滚动

5.3.5 在这里能过设置UICollectionView 的showHorizontalScrollIndicator 的值为NO ,则为不显示水平方向滚动时的滚动条

IOS-—UICollectionView使用综述(一 )(基础篇--垂直列表方式,横向相册方式)相关推荐

  1. iOS开发之Objective-C(基础篇)-李飞-专题视频课程

    iOS开发之Objective-C(基础篇)-232人已学习 课程介绍         该系列课程是iOS开发之Objective-C基础入门视频.课程中会详细的讲解OC语法特点,面向对象的使用,循环 ...

  2. Bootstrap框架(基础篇)之列表,表格,表单

    继续上篇的基础部分延伸,主要说一下列表,表格,表单相关Bootstrap框架变化以及基础知识. 1.列表篇 除了HTML提供的三种基本列表样式: 无序列表 <ul><li>-& ...

  3. ios图片轮播 (基础篇——UIScrollView实现方式)

    简述 : 人生不发返程的车票,一旦出发了,决不能返回. 人生只有一次,无悔的人生才是成功的人生,不要期待与奢望 "下一次" 如何. 过去的人生中,我们的路程中可能充满了欢笑与忧伤, ...

  4. python视频教程推荐it教程网_Python视频教程之入门基础篇_IT教程网

    资源名称:Python视频教程之入门基础篇 资源目录: [IT教程网]320b96cae58124db5fb6e7c5df99aefc [IT教程网]699434136852f34ec720f2a34 ...

  5. iOS动画系列之五:基础动画之缩放篇旋转篇Swift+OC

    这一篇主要介绍基础动画之缩放和旋转.这些基本操作分享完之后,我想想可以找个稍微复杂一点点的动画做做啦. 这篇继续基础篇,分享一下缩放和旋转.因为整体思路和平移基本上没有变化,加上源代码里面也有OC版本 ...

  6. iOS开发 - OC - block的详解 - 基础篇

    深入理解oc中的block 苹果在Mac OS X10.6 和iOS 4之后引入了block语法.这一举动对于许多OC使用者的编码风格改变很大.就我本人而言,感觉block用起来还是很爽的,但一直以来 ...

  7. iOS开发指南:从零基础到App Store上架(第2版 )

    第一部分 基础篇 第1章 开篇综述 2 1.1 iOS概述 2 1.1.1 iOS介绍 2 1.1.2 iOS 6新特性 2 1.2 开发环境及开发工具 3 1.3 本书中的约定 4 1.3.1 案例 ...

  8. iOS多分辨率适配综述

    最近在掘金上分享了一篇关于性能优化文章iOS性能优化系列篇之"优化总体原则",第一次发表文章在网上,结果收到了好多人的正面的反馈,受到了一点点鼓舞,这篇文章是很久以前组内做的一个分 ...

  9. iOS性能优化系列篇之“列表流畅度优化”工具篇

    这一篇文章是iOS性能优化系列文章的的第二篇,主要内容是关于列表流畅度的优化.在具体内容的阐述过程中会结合性能优化的总体原则进行分析,所以建议大家在阅读这篇文章前先阅读一下上一篇文章:iOS性能优化系 ...

最新文章

  1. 开源库nothings/stb的介绍及使用(图像方面)
  2. 92年的小哥,985的特聘教授:3年博士期间发表40篇SCI
  3. 2020最新点云深度学习综述
  4. jquery 源码分析初步
  5. 二叉树的三叉链表实现c语言,数据结构:二叉树的三叉链表存储--Java实现
  6. 使用requests请求网页时,返回的页面信息有时是乱码,如下代码
  7. C++ TR1、TR2与boost的关系
  8. 【翻译】.NET 5 Preview5发布
  9. 编程 小数位数_使用动态编程的n位数的非递减总数
  10. wordpress 添加自定义的一定级菜单
  11. vue给组件传html,如何将 html 模板作为道具传递给 Vue 组件
  12. Symfony1.4.11学习笔记(三):设置虚拟机
  13. java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...
  14. 《Linux Shell脚本攻略》读书笔记第二章 命令之乐
  15. 天津西站,大屏幕程序出错啦
  16. mysql导出文件名乱码_快速解决mysql导出scv文件乱码、蹿行的问题
  17. 动态路由、RIP以及IGRP路由的配置
  18. 服务器中的固态硬盘优缺点,「服务器」固态硬盘的优缺点有哪些
  19. 聆听第18期贡献者荣誉榜发布,体验落地才是王道
  20. R语言笔记3(NA解释)

热门文章

  1. 自学Python:截取屏幕画面
  2. Python资源大全 屌炸Python库
  3. 使用PyTorch来进展不平衡数据集的图像分类
  4. INTERSPEECH2020大会收录了哪些论文?
  5. 对!这就是你要的pandas练习题(❤️❤️)
  6. python数据处理随笔总结
  7. 最先进单插槽专业绘图解决方案
  8. Tensorflow中卷积的padding操作
  9. SpringBoot+EHcache实现缓存
  10. Wireshark使用入门