项目的要求是这样的git
其实也是一个轮播图,而已,因此依照轮播图的实现原理,这里以为也很简单,仍是利用UICollectionView,只不过自定义一个布局可以让cell自动吸附在最中间。github
在下面的数组中取出当前出如今界面可视范围内的NSIndexPath
,数组
NSArray *arr = [self.TFCollectionView indexPathsForVisibleItems];
而后遍历,取出最中间的NSIndexPath
,取出他的item而后+1,就能够进入下次循环了。可是发现取出来的是布局
打印信息是 NSLog(@"-path-:%d-:%ld-:%ld",i,(long)path.section,(long)path.item);
下同ui
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
还有这样的code
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
,那这个可行吗。可是这也又让我遇到了第二个坑。blog
接下来我取出visibleCells
并打印。排序
NSArray *arr = [self.TFCollectionView visibleCells];
而后遍历,可是发现取出来的是get
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
还有这样的it
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地址下载