我使用的UIScrollView
有几个需要显示的项目。我首次加载时,第一个项目位于UIScrollView
的中间位置。我试图让下一个项目,第二个项目,部分显示,允许用户知道有更多的项目要看,因此导致他们滚动项目。
我要做的是配置它,以便用户可以像UIScrollView
允许的那样随意滑动和滚动,但每次用户滑动时,我都希望UISCrollView
自动停止在最靠近视图中心的任何项目上。
我已启用分页并了解分页的工作原理。我想要做的就是让我可以更改分页似乎创建的“固定页面点数”。启用分页后,它似乎将视图的总宽度除以2,创建3个停止点:一个位于左边视图的末尾,一个位于直接中心(视图宽度/ 2),另一个位于视图的最右边界。
如果有人知道如何更改停靠点或页面点数(CGPoints),无论它们被称为什么,我都会非常感激。下面是我想要实现的目标的图像。
答案 0 :(得分:1)
不幸的是,UIScrollView分页不能按照您希望的方式工作。
分页在内容大小内创建尽可能多的UIScrollView边界部分。例如,如果您的滚动视图的帧大小为200x200,内容为400x200,则会创建两个水平页面。如果它是600x200,它将创建三个水平页面,依此类推。
这意味着您将无法以可以查看其他元素的方式进行分页。
为此,我建议覆盖此方法:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
以下是与完全分页相同效果的示例。我会使用你的元素大小的targetOffset行来完成所有工作。
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
float expectedOffset = targetContentOffset->x;
if (expectedOffset == 0 || expectedOffset == scrollView.contentSize.width)
return;
CGFloat targetOffset = roundf(expectedOffset / scrollView.frame.size.width) * scrollView.frame.size.width;
targetContentOffset->x = targetOffset;
}