如何检测用户是不是在 UIScrollView 中回滚了一个视图?

Posted

技术标签:

【中文标题】如何检测用户是不是在 UIScrollView 中回滚了一个视图?【英文标题】:How to detect if the user has scrolled back one view in a UIScrollView?如何检测用户是否在 UIScrollView 中回滚了一个视图? 【发布时间】:2011-04-20 17:51:28 【问题描述】:

我有一个 UIScrollView,里面有一堆视图,你可以在它们之间来回滑动。我有一个自动向前滚动视图的下一步按钮。每当我向前/向后滑动时,我想保持下一个按钮同步。如何检测用户是否向前和向后滑动,以便分别递增计数器?

【问题讨论】:

【参考方案1】:

通过以下方式找到解决方案:https://github.com/cwalcott/UIScrollView-Paging/blob/d0160aa2ad011bf47e1e2e78327ae840c3614107/README.txt

当显示超过一半的下一页/上一页时,这将增加/减少您的页面索引...

- (void)scrollViewDidScroll:(UIScrollView *)sender 
    CGFloat pageWidth = self.scrollView.frame.size.width;
    self.yourPageIndex = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

【讨论】:

【参考方案2】:

实现 UIScrollView 的委托方法

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

在该方法中,您需要根据 UIScrollView 的 contentOffset 执行一些逻辑来查看您所在的索引

【讨论】:

我如何确定这个逻辑? 假设您的视图宽度相同,我们称其为viewWidth,然后只需查找index = scrollView.contentOffset.x / viewWidth,这将为您提供索引,从 0 开始。如果您想用向上/向下滑动,然后 .x 应该变成 .y 虽然,我不太明白你想要保持同步的内容。下一个按钮可以简单地将视图的宽度添加到 contentOffset,如果您检测到滚动视图的末端以便用户无法滚动过去,则效果相同。【参考方案3】:

在文档中搜索“PageControl”。有一个很棒的示例项目可以处理类似的计算,应该会对您有所帮助。

【讨论】:

以上是关于如何检测用户是不是在 UIScrollView 中回滚了一个视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测用户何时尝试滑动“过去的 UIScrollView 内容偏移”?

如何在 iOS 中检测 UITextView (UIScrollView) 故障的底部

检测用户何时将手指从 UIScrollView 上移开

如何在 UIScrollView 上检测“Drag Enter”

UiScrollview scrollviewDidScroll 检测用户触摸

在 UIScrollView 的子类中检测滚动