一、开篇
1.瀑布流设计讨论
1.1.应用场景:在我们app开发中,瀑布流一般应用于大数据展示时,比如淘宝搜索页面、蘑菇街app、各大直播app主播列表页面等等。
1.2.设计思路:我们首要考虑UICollectionView,因为UICollectionView特殊性和可复用性。因为瀑布流每个格子item大小不同,需要计算每个item的宽高,就需要自定义UICollectionViewLayout。
2.瀑布流分类
我把瀑布流分为两种:垂直瀑布流、水平瀑布流。
2.1.垂直瀑布流:在我们app上实现的瀑布流一般是垂直瀑布流,也就是列数可设定,item宽度由列数决定,从上往下布局。
2.2.水平瀑布流:我在搜索网页百度图片时,看到百度图片的布局从而想到的一种布局方式。每行的高度是可设定的,item高度由图片大小决定,比例缩放。
3.瀑布流样式展示
二、具体实现
1.创建一个UICollectionViewCell,它上面只有一个imageView。
1 | // CollectionViewCell.m |
2.我们需要自定义一个layout,并且暴露一些可设置的属性用来控制瀑布流的对应展示,让瀑布流可用性更强大一些。
2.1 头文件:DYTWaterflowLayout.h
1 | @interface DYTWaterflowLayout : UICollectionViewLayout |
2.2 .m文件:DYTWaterflowLayout.m属性声明
1 | @interface DYTWaterflowLayout() |
2.3 .m文件:DYTWaterflowLayout.m主要方法实现
1 | // |
3.1 直接在控制器里使用
1 | // 设置布局 |
3.2 (举例)垂直瀑布流时,SDWebImage获取图片block里的具体实现
1 | if (weakSelf.heights.count < weakSelf.allImageUrls.count) { |
3.3 UICollectionViewDataSource中要注意的点
1 | - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { |
三、总结
1.瀑布流使用场景比较广泛,也是常用的技术之一,我也是又回顾了一遍,并且总结了整体的思路决定分享出来,结尾有demo,童鞋们可以自行下载。另外我参考的资料链接也会贴出,供大家研究比对。
2.水平瀑布流还没达到百度图片搜索的那种效果,右边距离屏幕间隙太大了,所以影响美观。后续会继续研究,期待有所突破。
3.有种情况是后台直接给图片的所有数据给我们,包括url、图片宽高等等,其实这样就是后台已经做好了图片的顺序优化处理。不过我们可以自己研究一下这个排序思路。如何达到右边间隙几乎相同,比如都为10。
4.当然有疑惑的地方可以留言或者直接私信我,我们可以一起讨论。
四、总结最终实现效果:
本文章demo:
瀑布流Demo
参考相关文章:
iOS–瀑布流的实现 – 作者Go_Spec
iOS 瀑布流基本实现 – 作者iOS_成才录
额。。。如果想知道图片里的小姐姐是谁,请直接在文章下面留言。因为我想暂时留点悬念给大家。(皮一下就很开心😄)