记一次UICollectionView中visibleCells的坑


项目的要求是这样的

其实也是一个轮播图,而已,所以依照轮播图的实现原理,这里觉得也很简单,还是利用UICollectionView,只不过自定义一个布局能够让cell自动吸附在最中间。

第一个坑

在下面的数组中取出当前出现在界面可视范围内的NSIndexPath,

NSArray *arr = [self.TFCollectionView indexPathsForVisibleItems];

然后遍历,取出最中间的NSIndexPath,取出他的item然后+1,就可以进入下次循环了。但是发现取出来的是

打印信息是 NSLog(@"-path-:%d-:%ld-:%ld",i,(long)path.section,(long)path.item);下同

2016-07-13 14:07:32.712 TFCycleScrollView[54025:1747068] -cell-:2-:51-:0
2016-07-13 14:07:32.713 TFCycleScrollView[54025:1747068] -path-:0-:51-:0
2016-07-13 14:07:32.713 TFCycleScrollView[54025:1747068] -path-:1-:51-:0
2016-07-13 14:07:32.713 TFCycleScrollView[54025:1747068] -path-:2-:51-:0

还有这样的

2016-07-13 14:07:30.716 TFCycleScrollView[54025:1747068] -path-:0-:50-:2
2016-07-13 14:07:30.716 TFCycleScrollView[54025:1747068] -path-:1-:50-:2
2016-07-13 14:07:30.717 TFCycleScrollView[54025:1747068] -path-:2-:50-:2

这里存在很大的坑啊,明明不一样的数据,为什么取出来,不过还有visibleCells,那这个可行吗。但是这也又让我遇到了第二个坑。

第二个坑

接下来我取出visibleCells并打印。

NSArray *arr = [self.TFCollectionView visibleCells];

然后遍历,但是发现取出来的是

2016-07-13 14:03:16.541 TFCycleScrollView[53987:1739752] -cell-:0-:50-:0
2016-07-13 14:03:16.541 TFCycleScrollView[53987:1739752] -cell-:1-:50-:2
2016-07-13 14:03:16.542 TFCycleScrollView[53987:1739752] -cell-:2-:50-:1

还有这样的

2016-07-13 14:03:53.626 TFCycleScrollView[53999:1741433] -cell-:0-:50-:3
2016-07-13 14:03:53.626 TFCycleScrollView[53999:1741433] -cell-:1-:51-:0
2016-07-13 14:03:53.627 TFCycleScrollView[53999:1741433] -cell-:2-:50-:4

也就是说indexPathsForVisibleItems是全部一样的,所以这个不可取,那么取visibleCells,取出来了,但是顺序又和实际的是不一样的,所以这样我就决定手动给排个序,然后取最中间的,这样就能满足需求了。

做法是这样的:

NSArray *visibleCellIndex = [self.TFCollectionView visibleCells];
NSArray *sortedIndexPaths = [visibleCellIndex sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSIndexPath *path1 = (NSIndexPath *)[self.TFCollectionView indexPathForCell:obj1];
NSIndexPath *path2 = (NSIndexPath *)[self.TFCollectionView indexPathForCell:obj2];
return [path1 compare:path2];
}];

这样返回后的数组就是排序后的数组,也是符合要去的。

Demo地址下载

参考

UICollectionView indexPathsForVisibleItems order

记一次UICollectionView中visibleCells的坑的更多相关文章

  1. Nancy总结(二)记一次Nancy 框架中遇到的坑

    记一次Nancy 框架中遇到的坑 前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题.Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上 ...

  2. 记pytorch版faster rcnn配置运行中的一些坑

    记pytorch版faster rcnn配置运行中的一些坑 项目地址 https://github.com/jwyang/faster-rcnn.pytorch 一般安装配置参考README.md文件 ...

  3. 记前端状态管理库Akita中的一个坑

    记状态管理库Akita中的一个坑 Akita是什么 Akita是一种基于RxJS的状态管理模式,它采用Flux中的多个数据存储和Redux中的不可变更新的思想,以及流数据的概念,来创建可观察的数据存储 ...

  4. 记一次 Spring 事务配置踩坑记

    记一次 Spring 事务配置踩坑记 问题描述:(SpringBoot + MyBatisPlus) 业务逻辑伪代码如下.理论上,插入数据 t1 后,xxService.getXxx() 方法的查询条 ...

  5. Netty中的那些坑

    Netty中的那些坑(上篇) 最近开发了一个纯异步的redis客户端,算是比较深入的使用了一把netty.在使用过程中一边优化,一边解决各种坑.儿这些坑大部分基本上是Netty4对Netty3的改进部 ...

  6. maven build和push image中遇到的坑(学习过程记录)

    最近在做jenkins的持续集成构建,其中一项是要实现docker容器化部署.项目本身是maven项目,我对于maven和docker都没有什么认知基础,于是求助百度和官网,从头开始啃起.遇到了不少的 ...

  7. 整理iOS9适配中出现的坑(图文)

    原文: http://www.cnblogs.com/dsxniubility/p/4821184.html 整理iOS9适配中出现的坑(图文)   本文主要是说一些iOS9适配中出现的坑,如果只是要 ...

  8. 整理 iOS 9 适配中出现的坑(图文)(转)

    作者:董铂然 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着 ...

  9. 整理 iOS 9 适配中出现的坑

    本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着有用户陆续升级 ...

随机推荐

  1. 文本三剑客之grep

    接受正则表达式,按行匹配,将会过滤出匹配的所有行 格式: grep   [OPTION]...     PATTERN    [FILE]... 可以看出,grep后可以同时接多个文件 选项OPTIO ...

  2. babel实践

    现在的主流浏览器还没有完全兼容ES6的语法,如ie11就不支持箭头函数. 使用过es6的人都知道,es6更加简洁和强大,可是使用es6写出来的代码并不能得到所有主流js引擎的支持,针对这一点,一个解决 ...

  3. LeetCode(14)Longest Common Prefix

    题目 Write a function to find the longest common prefix string amongst an array of strings. 分析 该题目是求一个 ...

  4. uC/OSii之任务划分

    满足以下几个指标将会使软件设计比较简洁高效. 满足实时性指标 任务数目合理 简化软件系统 降低资源需求 设备依赖性划分:主要是对于一些输入输出设备进行划分,输入输出设备分为主动型和被动性.主动型有一个 ...

  5. python018 Python3 输入和输出

    Python3 输入和输出在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能.本章节我们将具体介绍 Python 的输入输出. 输出格式美化Python两种输出值的方式: 表达式语句 ...

  6. Python和Mongodb

    定义好链接DB类 # -*- coding: UTF-8 -*- from pymongo import MongoClient # 数据库连接 class MongoDB(object): def ...

  7. 用SQLLDR来装载date类型的控制文件

    以前给山东某单位做oracle数据库恢复得时候,恢复出来得数据中包含date类型,当时给客户提供得是sqlldr得方式,因为数据量比较大,用sqlldr装载起来速度比较快,所以采用了这种方式,结果在装 ...

  8. PHP应用日期与时间

    <?php/* 时间戳 * * 1. 是一个整数 * 2. 1970-1-1 到现在的秒数 1213212121 * * 2014-02-14 11:11:11 * * 02/14/2014 1 ...

  9. Linux内核设计与实现——读书笔记1:内核简介

    内核:有的时候被称管理者或者操作系统核心,通常内核负责响应中断的中断服务程序, 负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间德内存管理程序 和网络,进程间通信等系统服务程序共同组 ...

  10. PB编译

    java -jar wire-compiler-1.8.0-jar-with-dependencies.jar --java_out=./  ngame.proto 其中java_out是指输出要放在 ...