如何使用滚动视图内容偏移属性?
How to use the scroll view content offset property?
我有以下代码:
if scrollView.contentOffset.x == 10 {
print("works")
}
尽管当我向左或向右滚动时,控制台上没有打印任何内容。我知道这是非常基础的,虽然我只是想在深入研究之前理解这一点。
I put this in the view did load
这意味着代码将在加载视图时检查内容偏移量。在那一刻,如果滚动视图的 x 偏移量 exactly 10,则将打印消息。它不关心在那一刻之后会发生什么。
当您手动将滚动视图滚动到某个偏移量时,您似乎希望它打印消息。
一种方法是将代码移至 scrollViewDidScroll
。每次内容偏移量更改时都会调用此函数。
extension YourViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// this checks for whether contentOffset.x is around 10 (contented shifted to the right by 10 points)
if abs(scrollView.contentOffset.x - 10) < 1 {
print("works")
}
}
}
并记得将滚动视图的委托设置为 self
:
scrollView.delegate = self
请注意,我将条件更改为 abs(scrollView.contentOffset.x - 10) < 1
。这是给它一些“余量”,而不是说 x 偏移量必须 恰好 10。当您滚动时,内容偏移量很少更改为恰好 10(或恰好 任何东西,就此而言)。你必须是一个非常准确的滚动器才能做到这一点 :) 因此,我允许 9 到 11 之间的任何值通过检查。但即使有这个余量,如果你快速滚动,“作品”也不会被打印出来。因为当您滚动得更快时,内容偏移量每次都会发生更大的变化。您可能需要根据自己的需要调整津贴。
如果您想在每次用户停止滚动时打印“works”,您可以实现以下两种方法:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if abs(scrollView.contentOffset.x - 10) < 1 {
print("works")
}
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if abs(scrollView.contentOffset.x - 10) < 1 {
print("works")
}
}
我有以下代码:
if scrollView.contentOffset.x == 10 {
print("works")
}
尽管当我向左或向右滚动时,控制台上没有打印任何内容。我知道这是非常基础的,虽然我只是想在深入研究之前理解这一点。
I put this in the view did load
这意味着代码将在加载视图时检查内容偏移量。在那一刻,如果滚动视图的 x 偏移量 exactly 10,则将打印消息。它不关心在那一刻之后会发生什么。
当您手动将滚动视图滚动到某个偏移量时,您似乎希望它打印消息。
一种方法是将代码移至 scrollViewDidScroll
。每次内容偏移量更改时都会调用此函数。
extension YourViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// this checks for whether contentOffset.x is around 10 (contented shifted to the right by 10 points)
if abs(scrollView.contentOffset.x - 10) < 1 {
print("works")
}
}
}
并记得将滚动视图的委托设置为 self
:
scrollView.delegate = self
请注意,我将条件更改为 abs(scrollView.contentOffset.x - 10) < 1
。这是给它一些“余量”,而不是说 x 偏移量必须 恰好 10。当您滚动时,内容偏移量很少更改为恰好 10(或恰好 任何东西,就此而言)。你必须是一个非常准确的滚动器才能做到这一点 :) 因此,我允许 9 到 11 之间的任何值通过检查。但即使有这个余量,如果你快速滚动,“作品”也不会被打印出来。因为当您滚动得更快时,内容偏移量每次都会发生更大的变化。您可能需要根据自己的需要调整津贴。
如果您想在每次用户停止滚动时打印“works”,您可以实现以下两种方法:
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
if abs(scrollView.contentOffset.x - 10) < 1 {
print("works")
}
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if abs(scrollView.contentOffset.x - 10) < 1 {
print("works")
}
}