【问题标题】:Make UICollectionView always stop scrolling with item centered使 UICollectionView 始终以项目为中心停止滚动
【发布时间】:2014-11-12 02:05:12
【问题描述】:

基本上,我想要一些类似于任务切换 UI 的东西,无论您如何滚动,项目总是以完全居中的方式结束。我认为这与分页不同,因为将可见多个项目(居中的项目,以及左侧和右侧的项目,如果它们存在的话)。

我怎样才能做到这一点(iOS 7+)。

【问题讨论】:

    标签: ios scroll uicollectionview centering


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您需要通过实现滚动视图委托方法 didBeginDragging、scrollViewWillBeginDecelerating 来“滚动杰克”滚动视图:

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

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

      【讨论】:

      【解决方案3】:

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

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

      Gist link

      【讨论】:

        猜你喜欢
        • 2015-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 2019-10-04
        相关资源
        最近更新 更多