第一弹 - 资源福利版.apk
萌猫导航
首页 » 技术 » iOS

记一次UICollectionView中visibleCells的坑

作者: 不爱洗头发 来源: 怪哈哈网 日期: 2017-07-05 10:45:03 人气: -

项目的要求是这样的

记一次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-:02016-07-13 14:07:32.713 TFCycleScrollView[54025:1747068] -path-:0-:51-:02016-07-13 14:07:32.713 TFCycleScrollView[54025:1747068] -path-:1-:51-:02016-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-:22016-07-13 14:07:30.716 TFCycleScrollView[54025:1747068] -path-:1-:50-:22016-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-:02016-07-13 14:03:16.541 TFCycleScrollView[53987:1739752] -cell-:1-:50-:22016-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-:32016-07-13 14:03:53.626 TFCycleScrollView[53999:1741433] -cell-:1-:51-:02016-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地址下载


转载请注明文章来源(欢迎分享): http://www.guaihaha.com/ios/16362.html

怪哈哈动漫图库
关于怪哈哈
怪哈哈是一个集搞笑,美女,动漫,游戏,技术等为核心的综合性网站!
联系我们
商务洽谈、广告合作、友情链接、侵权举报,这些都可以联系我们哦!
关于我们 - 联系我们 - 广告服务 - 免责申明   
本站文字和图片均为严格审查筛选收藏,均收集整理于互联网,其著作权归原作者所有,如果有侵犯您权利的照片,请来信告知,我们将及时撤销相应文字和图片.
Copyright @2014-2020 怪哈哈网 All Rights Reserved.
【谢谢大家一直支持贵站】