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

Posted

技术标签:

【中文标题】如何检测用户何时尝试滑动“过去的 UIScrollView 内容偏移”?【英文标题】:How can I detect when the user tried to swipe "past UIScrollView content offset"? 【发布时间】:2018-02-23 03:00:33 【问题描述】:

例如,我有一个按钮,当用户点击它时,它会从底部打开一个弹出的滚动视图,其中有很长的垂直内容。如果用户在滚动视图内容偏移位于顶部时尝试向下滑动,我想通过动画使其飞到屏幕底部来关闭滚动视图弹出窗口。

如何检测该事件?我知道当滚动视图使用scrollViewDidScroll 函数滚动时我可以得到事件。但它没有给我任何关于用户是向上还是向下滚动的信息。所以我不能检查“当offset.y 为0 并且用户仍在刷.down 然后关闭弹出窗口”。请帮忙。谢谢。

【问题讨论】:

当滚动视图被拉下超过顶部时你不会得到一个负偏移量吗? @rmaddy 哦等等。好的,让我试试看。 【参考方案1】:

在 scrollViewDidScroll(_ scrollView: UIScrollView) 方法中试试这个

let scrollDiff = scrollView.contentOffset.y - self.previousScrollOffset

let absoluteTop: CGFloat = 0;
let absoluteBottom: CGFloat = scrollView.contentSize.height - scrollView.frame.size.height;

let isScrollingDown = scrollDiff > 0 && scrollView.contentOffset.y > absoluteTop
let isScrollingUp = scrollDiff < 0 && scrollView.contentOffset.y < absoluteBottom
self.previousScrollOffset = scrollView.contentOffset.y

并将其设置为全局变量 var previousScrollOffset: CGFloat = 0;

您可以打印并检查这是向上还是向下滚动

希望这能给你指明方向

【讨论】:

谢谢!这让我更清楚地了解它是如何工作的。现在为什么我之前没有考虑保存以前的滚动偏移量...#facepalm

以上是关于如何检测用户何时尝试滑动“过去的 UIScrollView 内容偏移”?的主要内容,如果未能解决你的问题,请参考以下文章

检测何时在 ListView 中滑动项目

检测用户何时点击 UIDatePicker 中的选择指示器?

如何在 Jetpack compose 中检测 Horizo​​ntalPager 中的滑动?

如何检测用户何时加入语音频道?

如何知道用户何时在 PDFView 中滑动到下一页? - 安卓

如何检测用户何时在 Swift 中完成移动 Range 滑块