如何在特定点停止UIScrollView?

如何在特定点停止UIScrollView ? 也就是说,在用户交互后设置UIScrollView的最终位置?

具体来说,如何在水平UIScrollView设置间隔,以便它只在这些点停止?

我希望我说的很清楚。

看一下方法scrollViewWillEndDragging:withVelocity:targetContentOffset: UIScrollViewDelegate 。 它旨在完全满足您的需求。

当用户完成拖动滚动视图时,滚动视图将此消息发送到其委托。 第三个参数( targetContentOffset )作为指针传递,您可以更改其值以更改滚动视图将停止的位置。

iOS 5.0及更高版本。

你有3个选择:

  1. 您可以使用pagingEnabled执行此操作。
  2. UIScrollViewDelegate使用setContentOffset: animated: scrollViewDidEndDecelerating:方法
  3. 使用touchesBegantouchesMovedtouchesEnded创建自己的滚动视图,并使用适当的端点创建动量

我找到了适合我的东西。 它让你滚动到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)执行相同的操作

对于那些我们需要在Swift中设置targetContentOffset ,就像rob mayoff在上面的优秀答案中说的那样:

 func scrollViewWillEndDragging(scrollView: UIScrollView!, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer) { targetContentOffset.memory.y = x } 

这将工作得很好:

 override func scrollViewDidScroll(scrollView: UIScrollView) { if scrollView.contentOffset.y > CERTAIN_POINT { scrollView.scrollEnabled = false scrollView.scrollEnabled = true } } 

要实现这一点,你需要启用scrollview的分页

例如:

 [scrollView setContentSize:CGSizeMake(640, 161)]; [scrollView setPagingEnabled:YES]; 

这里,scrollview的宽度是640(iphone屏幕宽度的两倍),如果启用了分页,它将根据宽度将其平均分配。 因此,当我们滚动到此位置时,它将停在特定的偏移处。

 [scrollView setContentSize:CGSizeMake(640, 161)]; 

我认为这可以帮助您检查apple提供的此API

  • (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated

苹果清楚地说明了这个方法滚动内容视图,以便rect定义的区域在滚动视图中可见。 如果该区域已经可见,则该方法不执行任何操作。

对于垂直滚动我使用它。 工作得很好

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView {self.scrollView.contentOffset = CGPointMake(0,desiredPoint.y); }