UICollectionView(一)基本概念
整体预览
高等级的包含和管理(Top-level containment and management)
UICollectionView
UICollectionViewController
UICollectionView对象为collection view的内容定义了显示的区域。该类是 UIScrollView的子类,能够拥有大量的滚动区域,同时该类能够更具布局对象的布局信息,非常方便的显示数据。
UICollectionViewController对象提供视图控制器等级的管理支持,根据需求可以选择是否使用。
内容管理(Content management)
UICollectionViewDataSource
UICollectionViewDelegate
数据源对象( data source object)是与collection view相关联的最重要对象,并且我们必须提供。该对象管理着collection view的内容并且创建视图显示内容。为了实现数据源对象,我们必须创建一个对象遵守UICollectionViewDataSource协议。
UICollectionView的代理对象能够让我们拦截来自collection view有趣的信息并且自定义view的行为。例如:我们使用代理对象来跟踪在collection view中选中和高亮的item对象,不像数据源对象,代理对象是可选的。对于跟多的信息,可以看Designing Your Data Source and Delegate.
显示内容(Presentation)
UICollectionReusableView
UICollectionViewCell
所有显示在UICollectionView中的views都必须是UICollectionReusableView类的实例。通过使用UICollectionView该类支持循环机制。重复利用视图将提高整体的性能,特别是滚动的流畅。
UICollectionViewCell 对象是具体类型的重用视图,用于展示我们的数据。
布局(Layout)
UICollectionViewLayout
UICollectionViewLayoutAttributes
UICollectionViewUpdateItem
UICollectionViewLayout和子类作为布局对象主要负责定义位置、大小、cell的可视属性,以及collection view中重用的视图。
在布局过程中,一个布局对象(layout objects)将创建布局属性对象(layout attribute objects),该属性对象是UICollectionViewLayoutAttributes类的实例,它将告诉collection view在哪里以及怎样显示cells和重用视图。
无论什么时候数据item在collection view中进行插入 (inserted)、删除(deleted)、移动(move),布局对象接受UICollectionViewUpdateItem类的实例,我们从未使用该类自己创建实例。对于更多有关布局对象信息,可以看 The Layout Object Controls the Visual Presentation.
流动布局(Flow layout)
UICollectionViewFlowLayout
UICollectionViewDelegateFlowLayout
UICollectionViewFlowLayout类是具体的布局对象,能够用于实现网格或者其它基于线性的布局。我们能够直接使用该类,或者设置flow代理,UICollectionViewDelegateFlowLayout协议中提供了大量的方法来方便我们自定义布局信息。
下图显示了核心对象与collection view之间的关系。collection view从数据源(data source )获取cells显示的相关信息。数据源(data source)和代理(delegate)对象需要APP提供自定义对象并用于管理内容,包括选中和高亮的cells。布局对象(layout object)主要负责确定cell的位置,并且通过提供一个或者多个布局属性对象发送相关信息给collection view,collection view将布局信息与cell合并创建最终的可视界面。
Figure 1-1 Merging content and layout to create the final presentation
什么是UICollectionView?
UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView.
标准的UICollectionView包含三个部分,它们都是UIView的子类:
Cells 用于展示内容的主体,对于不同的cell可以指定不同尺寸和不同的内容.
Supplementary Views 追加视图可以理解为每个Section的Header或者Footer,用来标记每个section的view.
Decoration Views 装饰视图 这是每个section的背景.
与UITableView的对比:
UITableView是iOS开发中的非常重要的一个类,对这个类应该是非常熟悉了。实现一个UICollectionView和实现一个UITableView基本没有什么大区别,它们都同样是datasource和delegate设计模式的:datasource为view提供数据源,告诉view要显示些什么东西以及如何显示它们,delegate提供一些样式的小细节以及用户交互的相应。
UICollectionViewDataSource中:
section的数量 -numberOfSectionsInCollection:
某个section里有多少个item -collectionView:numberOfItemsInSection:
对于某个位置应该显示什么样的cell -collectionView:cellForItemAtIndexPath:
实现以上三个委托方法,基本上就可以保证CollectionView工作正常了。
https://blog.csdn.net/longshihua/article/details/49617315
UICollectionView(一)基本概念相关推荐
- UICollectionView的headerView、footerView使用以及与UITableView加载headerView、footerView的区别...
为什么80%的码农都做不了架构师?>>> 前序 最近在一家公司实习,学习一些ios的知识.因为以前没有使用过UICollectionView,所以带我的导师让我仿照公司APP中 ...
- iOS6新特征:UICollectionView介绍
1.1. Collection View 全家福: UICollectionView, UITableView, NSCollectionView n 不直接等效于NSCollectionVi ...
- Swift:用UICollectionView整一个瀑布流
本文的例子和Swift版本是基于Xcode7.2的.以后也许不知道什么时候会更新. 我们要干点啥 用新浪微博的Open API做后端来实现我们要提到的功能.把新浪微博的内容,图片和文字展示在colle ...
- 控制器之间跳转实现转场动画,动画控制器概念
在iOS7以前,开发者如果希望定制导航控制器推入推出视图时的转场动画,一般都只能通过子类化UINavigationController或者自己编写动画代码去覆盖相应的方法,现在iOS7为开发者带来了福 ...
- RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例
1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- 数据结构(01)— 算法复杂度概念及常见的复杂度计算
1. 大 O 表示法 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度.大 O 表示法指出了最糟情况下的运行时间.大 O 表示法在讨论运行时间时, ...
- OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能
1. OpenCV 概念 图像处理( Image Processing )是用计算机对图像进行分析, 以达到所需结果的技术, 又称影像处理. 图像处理技术一般包括图像压缩, 增强和复原, 匹配.描述和 ...
- 用男女朋友关系解释计算机常用概念
运维方面 很多同学对热备,冷备,云备了解不深,我科普一下 IT 行业各种备份术语.以后别闹笑话了. 假设你是一位女性,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人.你随时可以 ...
最新文章
- 如何用for循环出数据库的数据
- linux ssh无需密码,linux下 ssh 实现无需密码的远程登陆
- 安装完SqlServer2008,wamp服务器无法启动的问题
- Python+selenium搭建自动化框架
- 以太坊 Solidity 函数返回(returns)多个值 和 接收方式
- Java eclipse: errors exist in required project(s)
- 元宇宙需要“基建狂魔”
- 自制的一个小地图生成器
- 【第一篇】Qt学习与使用---将数字转换成中文大写的形式
- 每日工作记录——W5500网口ping中出现的问题
- axios请求文件流下载文件
- 程序员到底要不要读研,过来人给你几点建议!
- .NET 结构体 Struck、类
- mysql 横向分表_mysql横向和纵向的数据库分表
- USB to TTL python 本地测试串口通信
- H5调起摄像头拍照上传
- 基于Qt5 的串口助手开发
- E站账号cookie分享_产品经理必懂知识点—cookie和session
- linux用命令下载图片,Linux命令行中采集指定页面的图片地址及图片下载
- steam网络游戏加速技术,针对任何联网进程或者游戏代理加速都行。
热门文章
- go python php 压力测试_pyLot 基于python的压力测试工具
- linux 调用redis cli,使用redis-cli定时执行指定命令
- CMU贺斌教授团队提出:冥想可以增强对脑机接口的控制
- 女性走夜路不安全?英国奇葩新招:无人机护航,关键时刻用光吓退张三
- 参会指南 |「MEET 2021智能未来大会」明天启幕!
- 一块CPU就能运行超逼真水流特效!胡渊鸣的算法被这样实现,本人看了都说好...
- 李飞飞、邓中翰当选美国国家工程院院士
- 中文预训练模型ZEN开源,效果领域内最佳,创新工场港科大出品
- 波士顿动力双足机器人Atlas放出逆天体操表演,网友:比我还强
- 阿里AI再揽2员大将:挖角高通、360,年薪百万美元