关闭

关于UICollectionView的使用(仅作为个人笔记,相关原理资料请查看文章尾部的《相关链接》)

标签: UICollectionViewLayo
160人阅读 评论(0) 收藏 举报
分类:

UICollectionView的结构组成:

1、Cells:用于展示内容的主体,对于不同的cell可以指定不同的尺寸和不同的内容;

2、Supplementary Views:即追加视图,类似于TableView的分段Section的Header或者Footer;

3、Decoration Views:装饰视图,这是Section的背景。


自定义UICollectionViewLayout:

UICollectionViewLayout的功能为向UICollectionView提供布局信息,包括Cell、追加视图和装饰视图的布局信息。实现一个自定义layout的常规做法是继承UICollectionViewLayout类,然后重载下列方法:

-(void)prepareLayout

做一些初始化操作(注意一定要调用[super  prepareLayout]


-(CGSize)collectionViewContentSize(可选实现)

返回collectionView的内容尺寸。

-(NSArray*)layoutAttributesForElementInRect:(CGRect)rect

1、返回rect中所有元素的布局信息;返回值为包含UICollectionViewLayoutAttributes的NSArray。

2、通过不同的UICollectionViewLayoutAttributes初始化方法可以获取对应的UICollectionViewLayoutAttributes:

1、layoutAttributesForCellWithIndexPath:

2、layoutAttributesForSupplementaryViewOfKind:withIndexPath:(按需实现)

3、layoutAttributesForDecorationViewOfKind:withIndexPath:(按需实现)


-(UICollectionViewLayoutAttributes*)layoutAttributesForItemAtIndexPath:(NSIndexPath*)indexPath

-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds

当边界发生改变时,是否刷新布局;


最后总结:在初始化一个UICollectionViewLayout实例后,一系列的准备方法将被自动调用,以保证layout实例的正确。

1、首先-(void)prepareLayout将被调用,默认该方法什么都没做,但是在自己的子类实现中,一般在该方法中设定一些必要的layout的结构和初始需要的结构和初始需要的参数等。

2、然后,-(CGSize)collectionViewContentSize将被调用,以确定collectionView应该占据的尺寸;该尺寸指的是所有内容所占的尺寸。

3、接下来-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect被调用;初始化的layout的外观将由该方法返回的UICollectionViewLayoutAttributes来决定。


注:当需要更新layout的时候,需要给当前的layout发送-invalidateLayout;

该消息立即返回,并且预约下一个loop的时候刷新当前的layout,这一点类似于UIView的setNeedsLayout方法。

(在-invalidateLayout后的下一个collectionView的刷新loop中,又会从prepareLayout开始,依次调用-collectionViewContentSize和-layoutAttributesForElementsInRects来生成更新后的布局)

相关示意图:




总结实现自定义UICollectionView必须实现的方法:

1、-(void)prepareLayout

[super prepare];//必须调用super

2、-(CGSize)collectionViewContentSize《设置该属性,才能滑动》


3、-(NSArray<UICollectionViewLayoutAttributes*>)layoutAttributesForElementsInRect:(CGRect)rect

4、-(NSArray<UICollectionViewLayoutAttribute*s>)layoutAttributesForItemAtIndexPath:(NSIndexPath*)indexPath《按需实现supplementaryView或者DecorationView》

1、使用[UICollectionViewLayoutAttributes  layoutAttributesForCellWithIndexPath:indexPath]创建attribute 并设置相关attribute的属性;


5、-(BOOL)shouldInvalidateForLayoutForBounceChange《scrollView的bounce发生变化时调用》

6、-(CGPoint)targetContentOffsetForProposedContentOffset:withScrollingVelocity(可选实现)《滑动结束时设置最终的offset》




布局之间切换:

通过使用setCollectionViewLayout:animated:,则可以在切换布局的同时,使用动画来过渡。



相关资料:

UICollectionView详解(附带图解)

UICollectionViewLayout示例(瀑布流、滑动、圆形)

UICollectionView自定义布局详解(详细分步骤解说)

自定义UICollectionView代码实例(纯代码示例)


0
0
查看评论

关于Runloop的使用(该文章仅作为个人笔记,原理文章请查看尾部《相关链接》)

RunLoop概念模型:(该文章仅作为个人笔记,更多详细资料请查看文章尾部《相关资料链接》) 这种模型通常被称作 Event Loop。 Event Loop 在很多系统和框架里都有实现,比如 Node.js 的事件处理,比如 Windows 程序的消息循环,再比如 OSX/iOS 里的 RunL...
  • csdn_wangxh
  • csdn_wangxh
  • 2016-10-11 11:32
  • 101

关于GCD的使用(该文章仅作为个人笔记,更多原理资料请查看文章尾部的《相关资料》)

GCD全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核、四核) GCD会自动管理线程的生命周期(创建线程...
  • csdn_wangxh
  • csdn_wangxh
  • 2016-10-12 11:03
  • 94

openstack资料-陈沙克整理

http://www.chenshake.com/openstack-information/ 这些资料基本都是英文,不过整理一下,方便深入研究的朋友。下面的链接,估计不翻墙,基本是看不到。网站肯定是可以访问的。改天把这些资料放到国内的网盘上,给大家下载。 Openstack最好的资...
  • ztejiagn
  • ztejiagn
  • 2013-04-17 12:48
  • 991

最近对物联网文章读后感

最近这几天阅读了一些关于物联网相关的文章,其中很多都是提到了物联网厂商众多,各自为营的问题,而且同时也发现了大家共同的想法就是物联网操作系统,CSDN上有位大牛博主正在主张开发Hello X物联网操作系统,从他的文章中获益不小,同时也看出大牛对物联网的深刻理解。今天早上又突然发现了一篇文章,同样列出...
  • hafoxiaowanzi
  • hafoxiaowanzi
  • 2015-06-16 09:14
  • 1790

[收藏]一片讲述ASP.NET运行原理的很好的文章

[转贴]原贴地址http://www.cnblogs.com/Heroman/archive/2005/05/12/153975.aspx首先先感谢 菩提本非树这一章是全书基础和精神所在,其后的例子章节是为了验证这章的讲述和实践讲述的内容其中第一节是讲述ASP.NET运行模式,这一节着眼于整个ASP...
  • jilate
  • jilate
  • 2005-07-28 15:55
  • 3826

OpenStack之学习资料

网上关于OpenStack的学习资料有很多,官网的doc文档也是很好的资料,还有一些牛人的技术博客,在此列举一些学习的资料。 IBM http://www.ibm.com/developerworks/cn/views/cloud/libraryview.jsp?sort_by=&show_...
  • henulwj
  • henulwj
  • 2015-08-30 10:40
  • 1283

Go语言学习资料整理

整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南-A Tour of Go Go语言圣经(中文版) Effective Go中文版 Go Web编程 build-web-application-with-golang Go入门指南 ...
  • xumaojun
  • xumaojun
  • 2017-11-28 09:43
  • 263

推荐: 凡尘一滴的[搜索引擎]知识文章(360DOC上他辑录了上百篇文章,非常受用)

推荐: 凡尘一滴的文章(360DOC上他辑录了47篇文章,非常受用)http://www.360doc.com/UserArt.aspx?CategoryID=3&UserID=7635&GroupID=-1&page=3 引子:我的文章
  • chengg0769
  • chengg0769
  • 2007-07-20 04:17
  • 803

Java 学习文章汇总

算法 ** 排序 《蛙步学排序算法之一 - 冒泡排序》 《蛙步学排序算法之二 - 选择排序》 《蛙步学排序算法之三 - 插入排序》 《蛙步学排序算法之四 - 希尔排序》 《蛙步学排序算法之五 - 堆排序》 《蛙步学排序算法之六 - 合并排序》 《蛙步学排序算法之七 - 快速排序》 ** ...
  • love_world_
  • love_world_
  • 2014-03-10 21:41
  • 2353

学习资料-人工智能资料大全

人工智能资料大全 斯坦福大学cs231 • 课件地址:http://cs231n.stanford.edu/slides/2017/ • 课程视频地址:https://www.youtube.com/playlist?list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3E...
  • LengendGrass
  • LengendGrass
  • 2017-11-27 14:38
  • 320
    个人资料
    • 访问:455次
    • 积分:34
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档