在上一篇博客中《iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流》,自定义瀑布流的列数,Cell的外边距,Cell的最大以及最小高度是在我们的布局文件中是写死的,换句话说也就是不可配置的。为了循序渐进,由浅入深呢,上篇博客暂且那么写。不过那样写太过死板,本来使用起来比较灵活的自定义布局,如果把其配置参数给写死了,就相当于在笼中的猛兽,再厉害不也白扯蛮。

  在今天这篇博客中我们要接着上篇博客中的Demo,使其自定义布局的属性在使用它的UICollectionView中是可配置的。 当然在本篇要介绍的Demo中只提取了四个布局参数,无论添加一个Delegate,但思路都是一样的。我们把上一篇博客中写死的内容,通过布局代理来提供参数配置,这样就灵活多了。好了,咸淡扯的适中,进入我们今天的主题。

  一.进化后的运行效果

    下图算是Demo的2.0版本的运行效果,和之前的比较起来功能确实强大了不少。因为他是可配置化的,根据用户输入的参数来确定瀑布流的样式。当然Demo中是通过用户输入的参数来确定的,如果你在代码中使用该自定义瀑布流,需要根据你的实际情况可以配置瀑布流的参数,来打造属于你自己的瀑布流。网上虽然好多实现瀑布流的博客和代码,但是像今天这样可配置的瀑布流应该是不多的,至少我没见过,所以喽就写一个,开源一下,给大家分享交流一下。

  二、自定义瀑布流使用方式

    该自定义瀑布流布局的使用方式和系统自带的UICollectionViewDelegateFlowLayout用法一直,都是通过布局代理来定制布局参数,关于UICollectionViewDelegateFlowLayout的内容详见《iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调》中有关UICollectionViewDelegateFlowLayout代理介绍的内容。

    如果想使用该布局文件,你需要为我们的UICollectionView来指定该布局文件,在本篇博客中的Demo中是在Storyboard中进行自定义布局文件的指定的,你也可以通过代码的方式指定,再次不做过多的赘述。指定该自定义布局后,你需要做以下事情:

    1.为布局指定代理方法

    首先获取UICollectionView的布局collectionViewLayout,然后为其设置CustomeCollectionViewLayoutDelegate代理即可,代码如下:

1     _customeLayout = (CustomeCollectionViewLayout *) self.collectionViewLayout;
2
3     _customeLayout.layoutDelegate = self;

    2.实现CustomeCollectionViewLayoutDelegate中的方法

    需要在UICollectionView的使用控制器中实现自定义布局中的代理方法来设置布局属性,我们这儿定了四个必须实现的方法。 你可以通过这些方法去设定cell的列数,Cell的外边距,Cell的最小高度,Cell的最大高度,如下所示:

#pragma mark <CustomeCollectionViewLayoutDelegate>
- (NSInteger) numberOfColumnWithCollectionView: (UICollectionView *)collectionViewcollectionViewLayout:( CustomeCollectionViewLayout *)collectionViewLayout{return _cellColumn;
}- (CGFloat)marginOfCellWithCollectionView:(UICollectionView *)collectionView collectionViewLayout:(CustomeCollectionViewLayout *)collectionViewLayout{return _cellMargin;
}- (CGFloat)minHeightOfCellWithCollectionView:(UICollectionView *)collectionView collectionViewLayout:(CustomeCollectionViewLayout *)collectionViewLayout{return _cellMinHeight;
}- (CGFloat)maxHeightOfCellWithCollectionView:(UICollectionView *)collectionView collectionViewLayout:(CustomeCollectionViewLayout *)collectionViewLayout{return _cellMaxHeight;
}

    3. 你就可以通过上述Delegate方法来修改自定义布局的属性了,你可以通过一个配置页面,进行参数配置。配置完后,进行CollectionView的刷新即可,这些在本博客中就不做赘述,详情请见博客下方gitHub分享地址。

    至此,我们的自定义瀑布流就相对比较完善了,不过还有好大的改善控件。感兴趣的小伙伴可以在此基础上加上你自己的东西。

iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流相关推荐

  1. iOS开发-类似微信录音上滑取消功能

    iOS开发-类似微信录音上滑取消功能 前言 效果 代码 先自定义UIButton 使用 监听上下滑动代码 前言 在社交媒体中开发中遇到需要做类似微信录音上滑取消功能,例子,虽然不是很好看,但是细节满满 ...

  2. iOS开发入门——模拟器方向判断及基本功能

    iOS开发入门--模拟器方向判断及基本功能 方向判断简单实用 手机模拟器吧,嗯...很多时候我们可能会遇到手机横屏之后图像没变的情况,嗯?怎么回事?这次我们就先来看看这种情况,做一个简单的判断. im ...

  3. 五款功能强大的国产软件,常常被误认为是外国人开发的

    今日的栽种,明日的果实,今天继续分享五个被误以为是国外软件的国产软件. 1.视频编辑--CyberLink 这是一款功能强大,高效易用的视频编辑器,光看名字又以为是国外软件,其实它是纯国产软件,中文名 ...

  4. 一款功能强大,可扩展端到端加密反向Shell的工具

    关于Mediator Mediator是一款功能强大的可扩展端到端加密反向Shell,该工具基于新型架构实现,采用Python语言开发,能够帮助广大研究人员通过一台"Mediator&quo ...

  5. 一款功能强大的桌面摄影软件—lightroom classic 2021

    lightroom classic 2021是一款功能强大的桌面摄影软件,让用户可以创作精美绝伦的照片,在桌面上轻松整理所有照片.您的照片并不一定总能完美地展现您要留存的景物,但使用该款软件您可以获得 ...

  6. postgresql 客户端_一款功能强大的数据库客户端:DataGrip

    前言 在我们日常的程序开发中,很大一部分时间是在与数据库打交道. 查数据,导数据,检查SQL执行计划,优化SQL等,是我们数据库开发工作的重要组成部分,而且很多时候我们会使用到多款数据库,如Oracl ...

  7. AntiSpy:一款功能强大的反病毒反Rootkit免费工具套件

    AntiSpy是一款免费但功能强大的反病毒与反rootkit工具套件,该工具可以给安全研究人员提供最高级别的权限来帮助我们检测.分析和恢复各种内核修改以及钩子设置.这样一来,在AntiSpy的帮助下, ...

  8. cmd命令不识别exp_GRAT2:一款功能强大的命令amp;控制(C2)工具

    GRAT2GRAT2是一款功能强大的命令&控制(C2)工具,该工具出于教育目的开发和设计,GRAT2采用Python3编程语言开发,客户端基于.NET 4.0实现.GRAT2的作者之所以开发G ...

  9. php在线编辑器_8款功能强大的Java编辑器,建议收藏!「渡一教育」

    作为一名合格的程序员,每天打交道最多的除了手机,恐怕就是编辑器了,需要花费大量的时间投身于代码的海洋中,使用各种不同的IDE来开发代码. 对于程序员们来说,一款好用的编辑器,需要像自己的左右手一样.一 ...

最新文章

  1. Ext fucionchart插件
  2. 精度87%!业内首个动静统一的图像分割套件重磅推出
  3. python中matrix是什么意思_初识Python
  4. 【温故知新】CSS学习笔记(盒子水平居中方法)
  5. 安装python环境与运行_专栏G|轻松学Python01:Python环境搭建与运行
  6. idea存在包但是运行项目一直报java.lang.NoClassDefFoundError的问题
  7. Vue实现简书导航栏效果
  8. Axure RP9 自学之路1-软件初识
  9. 湖南工商大学计算机网络原理,李小龙(湖南工商大学计算机与信息工程学院副院长)_百度百科...
  10. gc buffer busy release
  11. Windows勒索病毒防范、解决方法全攻略
  12. 在硅谷,人生的可能性不只有996
  13. AC9刷梅林安装entware usb挂载 u盘分区使用swap脚本
  14. 【项目实战1】封装虚拟机(封装母盘,建立子虚拟机)
  15. 宇电智能调节仪AIBUS 及MODBUS 通讯协议说明V8.0
  16. 不同层级管理者应具备的特质
  17. 重磅消息,Micrium的uCOS全家桶将推出免费商业授权
  18. QRCode.js 生成二维码放大后会模糊的问题
  19. sql2000 sp3、sql2000 sp4升级补丁下载和安装须知
  20. 19个必须知道的转录组知识点

热门文章

  1. Android中蓝牙的基本使用
  2. 从零开始学习Sencha Touch MVC应用之八
  3. windows2003系列(之)搭建DHCP服务与中继代理图解
  4. 排序算法 JavaScript
  5. percona-5.5安装笔记
  6. cocos2d-x 3.1.1 学习笔记[15] Shader 著色器
  7. 通过解决“构造包含所有给定子串的最短字符串”问题思考算法优化
  8. iOS开发网络数据之AFNetworking使用
  9. Nutch URL过滤配置规则
  10. 技术人员如何转型为产品经理