美文网首页
iOS之UICollectionView(一)

iOS之UICollectionView(一)

作者: 南衍儿 | 来源:发表于2017-12-04 19:40 被阅读0次

    集合视图(Collection view)是一种可以灵活显示有序数据项集的视图.集合视图使用十分广泛,也很强大.最常见的用途是以类似于网格的方式呈现项目.

    collection view基础


    为了在屏幕上显示其内容,集合视图与许多不同的对象协作.有些对象是自定义的,必须由您的应用程序提供.例如,您的应用程序必须提供一个dataSouce对象,该对象告诉集合视图要显示多少项.其他对象由UIKit提供,是基本集合视图设计的一部分.
    像table view一样,集合视图是面向数据的对象,其实现涉及与应用对象的协作.

    对象的协作

    集合视图的数据和视觉效果由不同的对象来控制,数据和显示效果是分开的.
    下图展示了集合视图和核心对象之间的关系.集合视图从dataSource中获取单元格的数据和视图.data Sourcedelegate对象是由您的应用程序提供的自定义对象,用于管理内容,包括单元格的选择和高亮显示.layout管理这些单元格在集合视图中所属的位置,并以一个或多个布局属性(layout attribute)对象的形式将该信息发送到集合视图.然后,集合视图将布局信息与实际单元格(和其他视图)合并,以创建最终的可视化表示.

    下面是一些相关的类或者协议:

    顶级容器和管理器
    • UICollectionView:
      该类是UIScrollView的子类,提供一个可滚动的显示区域,以供数据的展示.
    • UICollectionViewController:
      该类的使用是可选的,是UIViewController的子类,是UICollectionView的控制器,也可以使用普通的controller添加collectionView和代理来代替
    内容管理
    • UICollectionViewDataSource协议:
      数据源对象管理自定义的cell和一些显示的数据.必须提供一个显示了该协议的数据源对象.
    • UICollectionViewDelegate协议:
      该对象是可选的,该对象管理自定义的行为.例如,可以使用该实现了该协议的对象来追踪项目,高亮显示,点击事件等.
    子视图
    • UICollectionReusaleView:
      所有在collection view中显示的view必须都是该类的实例.这个类支持集合视图使用的回收机制.回收视图(而不是创建新视图)可以提高整体性能,特别是在滚动期间可以提高性能.
    • UICollectionViewCell:
      UICollectionViewCellUICollectionReusableView的子类,是专门用来显示数据的视图.是必须实现的.
    布局
    • UICollectionViewLayout:
      UICollectionViewLayout的子类,负责定义集合视图内的单元格和可重用视图的位置,大小和视觉属性。
    • UICollectionViewLayoutAttributes:
      在布局过程中,布局对象创建布局属性对象(UICollectionViewLayoutAttributes类的实例),告诉集合视图在何处以及如何显示单元格和可重用的视图
    • UICollectionViewUpdateItem:
      在集合视图中插入,删除或移动数据项,布局对象就会接收该类的实例.该类不用自行创建.
    流式布局(瀑布)
    • UICollectionViewFlowLayout:
      UICollectionViewLayout的子类,如果页面是线性布局的,可以使用这个layout
    • UICollectionViewDelegateFlowLayout协议:
      UICollectionViewDelegate的子类,可以实现UICollectionViewDelegate的功能还可以定义流式布局的行为.

    重用视图以提供性能

    集合视图采用可重用的视图来提高效率.当视图移出屏幕时,它们将置于重用队列中,而不是被删除.当内容重新移入屏幕,视图将从队列出列,并用新内容重新使用.为了便于回收和再利用,视图集合的显示所有视图都必须继承自UICollectionReusableView类.
    集合视图支持三种不同的可重用视图:

    • 单元格视图(cells):单元格的工作是从数据源(dataSource)对象中获取数据呈现单个项目的内容.每个单元格必须是UICollectionViewCell的一个实例,您可以根据需要创建子类化定制显示内容.单元对象为管理自己的选择和高亮显示状态提供了固有的支持.
    • Supplementary views:像cells一样,Supplementary view对象也是数据驱动的,可以定制每组数据的单元格以外的显示,比如footer View和header view,该视图不是必须的.
    • Decoration views:提供视图背景等

    与table view不同,collection view没有提供默认的单元数据显示样式,您可以使用它们构建小视图层次结构,显示图像,甚至动态地绘制内容.所以,collection view的使用比table view更为复杂和灵活.

    使用Layout对象控制显示

    Layout对象全权负责确定集合视图中项目的布局和视觉样式.尽管dataSource对象提供了视图和实际内容,但layout对象决定了这些视图的大小,位置以及其他与外观相关的属性.这种责任分离使得我们可以动态改变布局,而不需要改变由你的应用管理的任何数据对象.

    集合视图使用的布局过程与应用程序其余视图使用的布局过程相关,但与之不同.换句话说,混淆不要布局对象与layoutSubviews用于在父视图内重新定位子视图的方法.布局对象从不触及其直接管理的视图,因为它实际上并不拥有任何这些视图.而是生成描述集合视图中单元格,补充视图和装饰视图的位置,大小和可视外观的属性.这就是集合视图的工作,将这些属性应用于实际的视图对象.

    布局对象如何影响集合视图中的视图没有限制.布局对象可以只移动一些视图,可以只移动一点距离,也可以在屏幕上随意移动它们.它甚至可以重新定位视图,而不考虑周围的视图.例如,如果需要,布局对象可以将视图堆叠在一起.唯一真正的限制是布局对象如何影响你想要的应用程序的视觉风格.

    下图显示了垂直滚动流布局如何排列单元格和补充视图.在垂直滚动流布局中,内容区域的宽度保持固定,并且高度增长以适应内容.为了计算面积,布局对象一次放置一个视图和单元格,为每个布局对象选择最合适的位置.在流布局的情况下,单元格和补充视图的大小被指定为布局对象上的属性(attribute)或使用delegate.计算布局只是使用这些属性来放置每个视图的问题.


    Layout对象不止能控制大小和位置,还可以设置透明度,3D效果等.

    相关文章

      网友评论

          本文标题:iOS之UICollectionView(一)

          本文链接:https://www.haomeiwen.com/subject/lrwxixtx.html