UICollectionView笔记一:BASIC

来源:互联网 发布:战舰少女r淘宝店 编辑:程序博客网 时间:2024/06/17 11:25

UICollectionView由三个部分组成:

  • Cell,用来展示一个数据项
  • Supplementary view,展示跟数据项相关的内容,例如节头or节尾
  • Decoration view,装饰内容,与数据项无关,例如背景图片

UICollectionView相关的类

目的类/协议描述顶层容器和控制器UICollectionView
UICollectionViewController
UICollectionView定义了集合视图的可见区域,它继承自UIScrollView。
UICollectionViewController对collection view提供管理,它的使用是可选的
内容管理UICollectionViewDataSource协议
UICollectionViewDelegate协议
UICollectionViewDataSource协议来管理、创建和展示collection view的内容,这是必须实现的协议。
UICollectionViewDelegate协议是可选的。例如可以用来追踪collection view的选中和高亮状态。
展示UICollectionReusableView
UICollectionViewCell
显示在collection view里的所有view都必须是UICollectionReusableView类的实例
。Collection view中这个类支持复用机制。
UICollectionViewCell是用来展示主数据项内容的可复用view。
布局UICollectionViewLayout
UICollectionViewLayoutAttributes
UICollectionViewUpdateItem
UICollectionViewLayout布局类的子类,负责确定collection view里的cell和reusable view 的位置、大小以及可见性。
布局类在布局的过程中,会创建布局属性对象(UICollectionViewLayoutAttributes类),用来告知collection view在哪儿和怎样显示cell和reusable view
collection view中数据在插入、删除or移动的时候,布局对象需要接收UICollectionViewUpdateItem对象的实例,需要自己创建。
Flow layoutUICollectionViewFlowLayout
UICollectionViewDelegateFlowLayout协议
UICollectionViewFlowLayout能用来创建网格类的or线性的布局。
下图展示了collection view核心对象之间的关系。collection view从data source处获取展示cell所需的信息。data source和delegate对象,由app提供,用来管理内容,包括cell的选中和高亮。布局对象负责决定cells属于哪里,把信息以布局属性对象的形式发送给collection view。collection view 综合这些信息,创建最终的显示结果。


Reusable Views 提高性能

Collection views采用一种循环机制来提高效率。当views移动到屏幕外的时候,它们从view中移除,被放在一个重用的队列里,而不是被删除。当新的内容出现在屏幕时,views从队列里出列,重新显示新的内容。为了更容易的采用这种复用机制,collection view中显示的所有的views,都必须继承自UICollectionReusView类。
过程如下所示:

参考自:http://www.devdiv.com/iOS_iPhone-ios_uicollectionview_-thread-128378-1-1.html

1.如下图,左边是Collection View,右边是Cell和View的重用队列,刚开始,左边的数据显示内容,右边的重用队列还没有数据。

2.再看下图,当用户显示出了Collection View下面的内容后,Collection View中之前的一些Cell和View就已经不再被显示了,这是,系统是如何处理呢?

3.看这里,系统会把不用的Cell和View添加到重用队列中,以备后面使用

4.如何再次被使用呢,请看下图,当用户继续往下看内容的时候,系统就会提供队列中存在的Cell和View供使用。

5.最终使用效果如下图


布局对象控制显示结果

Data source对象提供views和实际的内容,布局对象决定views的size,location和一些与外观相关的属性。这种分离,可以用来动态改变布局,而不用改变app的数据对象。布局对象并不拥有这些views,相反,它只是产生属性来描述这些views。collection view 应用这些属性得到最终的view对象。
下图显示了一个垂直滚动的流布局怎样来组织安排它的cells 和 supplementary view。在垂直滚动的流布局中,内容的宽度是固定的,而高度则随着内容而增加。布局对象放置views 和 cells,计算大小,选择他们最合适的位置。在这个例子中,cells 和 supplementary view 的大小可以通过属性指定,or通过layout对象指定,or使用代理。

布局对象不仅仅控制view的size和position,也能指定其他的view相关的属性,例如透明度,3D变换,以及他们的可见性。

0 0
原创粉丝点击