Write in the first【写在最前】
UITableView 熟悉吧, UICollectionView 必须熟悉吧。
在WWDC2012
中的Introducing Collection Views
,苹果首次介绍了UICollectionView
,类似UITableView
的用法使人很容易接受,但强大的自定义布局,又使其相较于UITableView
有了选择它的更多理由,UITableView
中的表格只支持单排列表,没有办法支持网格列表模式,CollectionView
有着灵活的布局特性,这一点充分说明我们在学会UITableView
的基础上,再去学习推敲CollectionView
的必要性。
本篇文章主要从【UICollectionView
系统文件注解】学习总结。
在「时间 & 知识 」有限内,总结的文章难免有「未全、不足 」的地方,还望各位好友指出,以提高文章质量。
目录:
- UICollectionView概念
- UICollectionView基本组成
- UICollectionView层次结构
1.UICollectionView 继承于 UIScrollView
2.UICollectionViewDataSource数据源
3.UICollectionViewDelegate代理
4.UICollectionViewLayout自定义布局对象
5.UICollectionViewFlowLayout布局对象(默认)
6.UICollectionViewCell样式
7.UICollectionViewLayoutAttributes布局属性- UICollectionView与UITableView比较
- UICollectionView使用说明
- UICollectionView基本使用
- 自定义FlowLayout:水平滚动相册
- UICollectionView效果图
- 自定义FlowLayout:瀑布流
- UICollectionView.h 属性&方法
UICollectionView概念
本着好好学习,了解权威的目的,我们还是主动看官网的说明。
上图释义:管理有序的数据项集合和使用自定制的布局。
通俗点就是:UICollectionView 是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView
,可以做九宫格布局的一种view
;
UICollectionView基本组成
注解:如上图:你看到的就是一个最简单的UICollectionView
,它包含:Cells
、Supplementary Views
、Decoration Views
。
Cells:用于展示内容的主体,
cell
的尺寸和内容可以各不相同。Supplementary Views:追加视图,类似于
UITableView
每个Seciton
的Header View
或者Footer View
,用来标记Section
的View
。Decoration Views:装饰视图,完全跟数据没有关系的视图,负责给
cell
或者supplementary Views
添加辅助视图用的,灵活性较强。不管多么复杂的
UIcollectionView
都是由着三个部件组成的。
UICollectionView层次结构
注解:
1、UICollectionView 继承于 UIScrollView
|
|
2、UICollectionViewDataSource:主要管理视图数据源方面,告诉view
要显示些什么东西以及如何显示它们。
@required(必须)
|
|
@optional(可选)
|
|
3、UICollectionViewDelegate:主要管理于用户交互方面,提供一些样式的小细节。
@optional(可选)
|
|
事件的处理顺序如下:
1、手指按下:
shouldHighlightItemAtIndexPath
(如果返回YES则向下执行,否则执行到这里为止)。2、
didHighlightItemAtIndexPath
(高亮)。3、手指松开:
didUnhighlightItemAtIndexPath
(取消高亮)。4、
shouldSelectItemAtIndexPath
(如果返回YES
则向下执行,否则执行到这里为止)。5、
didSelectItemAtIndexPath
(执行选择事件)。
选中 和 取消选中
item
时 ,会触发的方法
|
|
- 补充视图(头部或尾部视图),显示 和 移除
|
|
- 长按某
item
,弹出copy(复制)
和paste(粘贴)
的菜单相关。
|
|
- 注册类型相关
|
|
- 复用队列
|
|
- 动态修改当前的Item 和 Section
|
|
- 其它属性 和 方法相关
|
|
4、UICollectionViewLayout:自定义布局,它负责了将各个cell
、Supplementary View
和Decoration Views
进行组织。
UICollectionViewLayout 是UICollectionView
特有的,是UICollectionView
的精髓所在,它负责将每个cell
、supplementary view
、decoration view
进行组合,为它们设置各自的属性,包括:位置、大小、透明度、层级关系、形状等。UICollectionViewLayout
决定了,UICollectionView
是如何显示在界面上,从UICollectionView
初始化必须要一个UICollectionViewLayout
也可以看得出来,Layout
对于UICollectionView
的最要性。
自定义布局:只要了解5个方法(重写它方法,扩展功能)
|
|
5、UICollectionViewFlowLayout:主要管理布局信息方面,Apple
为我们提供了一个最简单可能也是最常用的默认layout
对象,UICollectionViewFlowLayout
。Flow Layout
简单说是一个直线对齐的layout
。
- 我们来了解
UICollectionViewFlowLayout
它内部常用的属性:
|
|
- 上面对
FlowLayout
的属性设置,当然代理方法中也有一一对应,UICollectionViewDelegateFlowLayout
常用方法:
|
|
UIEdgeInsets sectionInset 内边距
6、UICollectionViewCell:相对于UItableViewCell
而言,UIcollectionViewCell
没有那么多样式。UIcollectionViewCell
不存在所谓的style
,也没有titleLabel
和内置的imageView
属性,UIcollectionViewCell
的结构上相对比较简单。
cell
:本身作为的View
,这里应该就是UICollectionReusableView
backgroundView
:用作cell
背景的视图,设置背景图片等。selectedBackgroundView
:cell
被选中的背景视图contentView
:内容视图,自定义的cell
时应该将内容放在这个View上补充:
UIcollectionView
有一个小细节:被选中的cell
的自动变化,所有的cell
中的子View
,也包括contentView
中的子View
,当cell
被选中是,会自动去查找view
是否有被选中状态下的改变,如果在contentView
中有一个imageView
的selected
和normal
状态下的图片是不同的,那么选中cell
这张图片也会从normal
变成selected
,不需要添加代码。
7、UICollectionViewLayoutAttributes 布局属性:
在了解这个类之前,我们得先疏通一下,UIcollectionView
的布局方式,首先我们之前一直提,UIcollectionView
的初始化必须有一个UICollectionViewLayout
,也就是我们说的,必须要有一个布局格式样式,
那么一个UIcollectionView
有那么多的cell
、supplementary
View
、decoration View
,UIcollectionViewLayout
是如何进行布局显示的呢?
原来从UIcollectionViewLayout
开始加载内容的时候,便默默的做了很多事:首先是去调用 prepareLayout
准备布局,然后根据当前屏幕所处位置的合适rect
,得到每一个视图的UICollectionViewLayoutAttributes
属性,然后在把视图按UICollectionViewLayoutAttributes
中的属性描述设置视图具体的center
、size
等等,期间也会去调用其他方法去确定一些间距。所以UICollectionViewLayoutAttributes
是每个视图决定性的布局的属性。
|
|
UICollectionView与UITableView比较
相同点:
都需要遵守
DataSource
和Delegate
,实现协议方法。待补充
不同点:
- 与
UITableView
的最大不同,布局交给了指定的UICollectionViewLayout
布局对象。
UICollectionView
的cell
使用必须先注册,使用出列的方式。UICollectionView
:Supplementary
补充视图需要先注册(这里可以充当区的头和尾)。待补充
- 与
UICollectionView 使用说明
说明:代码不重要,重要的是思维
创建
UICollectionView
必须要有布局参数flowLayout
;(采用懒加载)UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
cell
必须通过注册;registerClass: forCellWithReuseIdentifier:
自定义
Cell
,原因:系统cell
没有任何子控件;(添加子控件image
,label
)。@interface LNPhotoViewCell : UICollectionViewCell
FlowLayout
自定义(调整cell
尺寸,利用布局就做效果),原因:系统cell
中每个item
尺寸都一样;(继承flowLayout
或Layout
)。@interface LNFlowLayout : UICollectionViewFlowLayout
自定义布局: 只要了解5个方法(重写它方法,扩展功能)
|
|
UICollectionView基本使用
初始化
|
|
注册UICollectionView
使用的cell
类型
|
|
实现协议UICollectionViewDataSource
|
|
|
|
实现代理UICollectionViewDelegate
|
|
|
|
|
|
布局对象UICollectionViewDelegateFlowLayout
|
|
自定义FlowLayout:水平滚动相册
核心代码如下:
|
|
附图:
期待
- 如果在阅读过程中遇到 error || new ideas,希望你能 messages 我,我会及时改正谢谢。
- 点击右上角的 喜欢 和 订阅Rss 按钮,可以收藏本仓库,并在 Demo 更新时收到邮件通知。