如何在特定点停止UIScrollView?
如何在特定点停止UIScrollView
? 也就是说,在用户交互后设置UIScrollView
的最终位置?
具体来说,如何在水平UIScrollView
设置间隔,以便它只在这些点停止?
我希望我说的很清楚。
看一下方法scrollViewWillEndDragging:withVelocity:targetContentOffset:
UIScrollViewDelegate
。 它旨在完全满足您的需求。
当用户完成拖动滚动视图时,滚动视图将此消息发送到其委托。 第三个参数( targetContentOffset
)作为指针传递,您可以更改其值以更改滚动视图将停止的位置。
iOS 5.0及更高版本。
你有3个选择:
- 您可以使用
pagingEnabled
执行此操作。 - 在
UIScrollViewDelegate
使用setContentOffset: animated:
scrollViewDidEndDecelerating:
方法 - 使用
touchesBegan
,touchesMoved
和touchesEnded
创建自己的滚动视图,并使用适当的端点创建动量
我找到了适合我的东西。 它让你滚动到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); }