UICollectionView原理

来源:互联网 发布:泉州旅游数据分析 编辑:程序博客网 时间:2024/06/16 16:47

声明:此篇文章大部分为自己的理解,参照的是

文/Jadyn_Wu(简书作者)
原文链接:http://www.jianshu.com/p/08ca47773ae5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

在此特别的感谢原作者



UICollectionView是我们经常用的一个控件,但是有的时候我们也只是会用就可以,并没有去了解他的实现原理,CollectionView这个东西很广,用好了比可以做出多种效果,在此我们做一个皮毛的了解

1.简介:

collectionView是从IOS6开始的,布局灵活

首先我们先看一下原理图

其实,collectionView与tableView没有什么很大的区别,在图中大家可以看到,collectionView也有头视图和尾视图,但是在默认情况下,cell是一个流水布局,不过,你也可以通过collectionViewLayout去改变,这样就可以引申出很多效果


2.如何Run的

collectionView在UICollectionViewDelegate和UICollectionViewDataSource两个基本代理的前提下,又添加了一个UICollectionViewLayout,collectionView使用UICollectionViewLayout对cell进行多样化的布局。

这个图是collectionView的工作流程,当然了,首先第一步,如果要显示的话,collectionView先从数据源里获取cell,然后交给UICollectionView.这仅仅只是数据,再通过UICollectionViewLayout获取对应的layout attributes(布局属性)。最后,根据每个cell对应的layout attributes(布局属性)来对cell进行布局,生成了最终的界面。交互是通过UICollectionViewDelegate去做交互的

3.布局属性(layoutattributes)

布局属性到底是什么启示布局属性是collectionVIew的每一个cell都有的一个属性,通过属性,我们可以指定cell在collectionView中所渲染出的大小
,当然,它是通过UICollectionViewLayout去设置的,具体可以去查找一下如何设置其他的一些属性


4.UICollectionViewDelegate和UICollectionViewDataSource

前者的方法主要实现界面显示和cell的动作相关,后者是控制cell的移动和编辑相关,datasource为view提供数据源,告诉view要显示些什么东西以及如何显示它们,delegate提供一些样式的小细节以及用户交互的响应。


以下部分是贴简书上的,首先我标明出处,这篇文章我也是通过简书这个文章去写了一下我自己的理解,大部分的一样,在此特别感谢原作者

文/Jadyn_Wu(简书作者)
原文链接:http://www.jianshu.com/p/08ca47773ae5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

视图:

说到显示视图,在collectionView中,包含着三种视图:Cell View、Supplementary View和Decoration View。

1. Cell View

Cell视图是collectionView中的主要内容,位于中间段,默认是以瀑布流(flowLayout)的显示方式,它是通过DataSource中的方法设置的。

2. Supplementary View

Supplementary View展示了每一个section当中的信息,与cell类似,它是从DataSource的方法当中被设置的,但是与cell不同的是,它并不是强制需要的(默认是没有的:sectionHeaderView,sectonFooterView)。例如flow layout当中的headers和footers就是可选的Supplementary View。

3. Decoration View

Decoration View是装饰视图,每个section的背景就是Decoration View,比如iBooks中的书架就是这个。Decoration View没有功能性,跟DataSource没有关系。


重用:

在UICollectionView中,不仅Cell可以重用,Supplementary View和Decoration View也是可以并且应当被重用的。

如果我们在CollectionView向数据源请求数据之前使用-registerNib:forCellReuseIdentifier:方法注册的话,就可以省下每次判断cell是否为空并初始化cell的代码,如果在重用队列里没有可用的cell的话,runtime将自动帮我们生成并初始化一个可用的cell。

注册这个特性很受欢迎,所以apple提供了4种注册方式:

registerClass: forCellWithReuseIdentifier:registerNib: forCellWithReuseIdentifier:registerClass: forSupplementaryViewOfKind: withReuseIdentifier:registerNib: forSupplementaryViewOfKind: withReuseIdentifier:


前面两个方法是注册cell,后两个方法注册Supplementary View。其中,注册的方式有两种,第一种是直接注册class,它重用的时候会调用[[UICollectionView alloc] init]这样的初始化方法创建cell;另外一种是注册nib,它会自动加载nib文件。

如此一来,在DataSource返回cell和SupplementaryView的方法中就可以通过reuseIdentifier重用了。



文/Jadyn_Wu(简书作者)
原文链接:http://www.jianshu.com/p/08ca47773ae5
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

0 0
原创粉丝点击