項目的要求是這樣的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地址下載