如何在特定时刻停止UIScrollView
?也就是说,在用户交互后设置UIScrollView
的最终位置?
具体来说,如何设置水平UIScrollView
的间隔,以便它只在这些点停止?
我希望我说的很清楚。
答案 0 :(得分:33)
查看scrollViewWillEndDragging:withVelocity:targetContentOffset:
的方法UIScrollViewDelegate
。它旨在完全满足您的需求。
当用户完成拖动滚动视图时,滚动视图会将此消息发送给其委托。第三个参数(targetContentOffset
)作为指针传递,您可以更改其值以更改滚动视图停止的位置。
iOS 5.0及更高版本。
答案 1 :(得分:11)
你有3个选择:
pagingEnabled
执行此操作。UIScrollViewDelegate
scrollViewDidEndDecelerating:
方法中的setContentOffset: animated:
touchesBegan
,touchesMoved
和touchesEnded
创建您自己的滚动视图,并使用适当的端点进行推断以创建动力答案 2 :(得分:4)
我找到了对我有用的东西。它让你滚动到0,0点,但没有进一步:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.x <= -1) {
[scrollView setScrollEnabled:NO];
[self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
[scrollView setScrollEnabled:YES];
}
}
您可以对顶部,底部或右侧(x或y)执行相同操作
答案 3 :(得分:2)
对于那些我们需要在Swift中设置targetContentOffset
的 rob mayoff 在上面的优秀答案中说,这就是:
func scrollViewWillEndDragging(scrollView: UIScrollView!, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
targetContentOffset.memory.y = x
}
答案 4 :(得分:2)
这样可以正常工作:
public Fragment getItem(int position) {
return OneFragment.newInstance(position + 1);
}
答案 5 :(得分:1)
要实现这一点,你需要启用scrollview的分页
例如:
[scrollView setContentSize:CGSizeMake(640, 161)];
[scrollView setPagingEnabled:YES];
这里,scrollview的宽度是640(iphone屏幕宽度的两倍),如果启用分页,它将根据宽度将其平均分配。因此,当我们滚动到这个位置时,它将停在特定的偏移处。
答案 6 :(得分:0)
[scrollView setContentSize:CGSizeMake(640, 161)];
答案 7 :(得分:0)
我认为这可以帮助您检查apple提供的此API
苹果清楚地说过这个这个方法滚动内容视图,以便rect定义的区域在滚动视图中可见。如果该区域已经可见,则该方法不执行任何操作。
答案 8 :(得分:0)
对于垂直滚动我使用它。工作得很好