使UICollectionView始终以项目居中停止滚动

时间:2014-09-17 21:32:15

标签: ios scroll uicollectionview centering

基本上,我想要的是像任务切换UI一样的东西,无论你如何滚动,一个项目总是完全居中。我认为这与分页不同,因为可以看到多个项目(居中项目,左侧​​和右侧项目,如果存在)。

我怎么能实现这个目标(iOS 7 +)。

3 个答案:

答案 0 :(得分:2)

答案是在-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset中使用UIScrollViewDelegate并基本上除以项目(包括行间距等)并为目标提供适当的中心。

答案 1 :(得分:1)

通过实现滚动视图委托方法didBeginDragging,scrollViewWillBeginDecelerating:

,你需要基本上“滚动插孔”滚动视图

在scrollViewWillBeginDecelerating:你可以调用setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated并计算UICollectionViewCell在中心的内容偏移量。

这应该重新创建任务切换器UI,如果你快速滚动,你可以浏览很多应用程序,但它仍然停留在中心的一个应用程序。

答案 2 :(得分:0)

如果我理解你的问题,下面的Gist代码可能会有所帮助:显示一个UICollectionView,它停止了屏幕中心的滚动项目。

/*
     *
        |<-------     view width     -------->|
        ---------------------------------------
        |                                     |
        |<-w0->|<ws>|<--   wi  -->|<ws>|<-w0->|
 ---------------    ---------------    ---------------
 |             |    |             |    |             |
 |             |    |             |    |             |
 ---------------    ---------------    ---------------
        |                                     |
        |                                     |
        ---------------------------------------
     * 
     * w0: itemEdgeOffset
     * ws: space
     * wi: itemWidth
     * in this example: ws == w0
     */

Gist link