【发布时间】:2014-11-12 02:05:12
【问题描述】:
基本上,我想要一些类似于任务切换 UI 的东西,无论您如何滚动,项目总是以完全居中的方式结束。我认为这与分页不同,因为将可见多个项目(居中的项目,以及左侧和右侧的项目,如果它们存在的话)。
我怎样才能做到这一点(iOS 7+)。
【问题讨论】:
标签: ios scroll uicollectionview centering
基本上,我想要一些类似于任务切换 UI 的东西,无论您如何滚动,项目总是以完全居中的方式结束。我认为这与分页不同,因为将可见多个项目(居中的项目,以及左侧和右侧的项目,如果它们存在的话)。
我怎样才能做到这一点(iOS 7+)。
【问题讨论】:
标签: ios scroll uicollectionview centering
答案是在UIScrollViewDelegate 中使用-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset 并基本上除以项目(包括行距等)并为目标提供适当的中心。
【讨论】:
您需要通过实现滚动视图委托方法 didBeginDragging、scrollViewWillBeginDecelerating 来“滚动杰克”滚动视图:
在 scrollViewWillBeginDecelerating: 你可以调用 setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated 并计算任何 UICollectionViewCell 在中心的内容偏移量。
这应该会重新创建任务切换器 UI,如果您快速滚动,您可以在其中浏览许多应用程序,但它仍然会停留在中心的一个应用程序上。
【讨论】:
如果我正确理解您的问题,以下 Gist 代码可能会有所帮助:显示一个 UICollectionView,它在屏幕中心停止滚动项目。
/*
*
|<------- view width -------->|
---------------------------------------
| |
|<-w0->|<ws>|<-- wi -->|<ws>|<-w0->|
--------------- --------------- ---------------
| | | | | |
| | | | | |
--------------- --------------- ---------------
| |
| |
---------------------------------------
*
* w0: itemEdgeOffset
* ws: space
* wi: itemWidth
* in this example: ws == w0
*/
【讨论】: