zoukankan      html  css  js  c++  java
  • 记一次UICollectionView中visibleCells的坑

    记一次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

  • 相关阅读:
    ADO.NET 数据连接查询
    弹出消息对话框类
    C# 火星文转化 算法 dictionary 的使用案例
    微软官方的SqlHelper
    jsHelper
    【VC++积累】之六、MFC简要剖析
    C# 统计文章中字符的种类和个数 哈希表和字典的使用
    C# NetHelper
    C# XML操作类 XmlHelper
    【VS++积累】之七、黑客编程之匿名管道
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/5675897.html
Copyright © 2011-2022 走看看