UIScrollview 中的 ContentOffset 问题

Posted

技术标签:

【中文标题】UIScrollview 中的 ContentOffset 问题【英文标题】:ContentOffset issue in UIScrollview 【发布时间】:2017-04-20 12:54:33 【问题描述】:

我有一个奇怪的问题。我有一个 ScrollView 并且 ContentOffset 已经设置为它。 我已经通过下面的代码在它的委托中创建了一个条件。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

    if(scrollOffsetY > 90 && scrollOffsetY < 150) 

     NSLog(@"ContentOffset===>%f",ContentOffset);

    

我写的条件只有在我慢慢滚动滚动视图时才有效。如果我滚动得更快。它没有进入我的循环。

我该如何解决这个问题?并在条件为真时获取确切值?

【问题讨论】:

将您的代码移至 enddeclrating scrollViewDidScroll 只更新每一帧。如果你快速滚动 contentOffset 可以为每一帧跳跃一个非常大的数字。所以它可以在一帧内从 90 以下跳到 150 以上,并且代码永远不会被击中。如果不知道你的目标是什么,就没有办法提出“解决”这个问题的方法。 嗨@Anbu.Karthik,scrollViewDidEndDecelerating Decelegate 仅在滚动完成后调用,所以当我滚动 Fast 时。仅当我提到的 If 条件中的内容偏移值之间的滚动停止时,条件才满足。所以这对我没有帮助。 嗨@JonRose,是的,你说得对。但是我怎样才能达到这个条件呢?有没有其他方法可以实现? 你的目标是什么? 【参考方案1】:

UIScrollView 不会为每个滚动像素调用委托。相反,它会在显示的每个帧上调用它。当您快速滚动时,滚动视图可能会跳过您要检查的区域。如果您需要捕捉屏幕上指定区域的时刻,您可以添加一个变量来存储先前的偏移量并添加如下条件:

 if (previousScrollOffsetY > 150 && scrollOffsetY < 90) || (previousScrollOffsetY < 90 && scrollOffsetY > 150) 
    NSLog(@"Skipped area")

previousScrollOffsetY = scrollOffsetY;

【讨论】:

以上是关于UIScrollview 中的 ContentOffset 问题的主要内容,如果未能解决你的问题,请参考以下文章

水平 UIScrollView 中的多个垂直滚动 UIScrollView

检测 UIScrollView 中的滚动事件并发送到 UITableView 或其他 UIScrollView

UIScrollView 子视图中的水平 UISwipeGestureRecognizer ? (UIScrollView 只需要识别垂直滚动)

UIScrollView 中的 UITextView 都在另一个 UIScrollView 中

UIScrollView 中的 UITextView 中的键盘方向

uiscrollview 中的 uitableview(滚动问题)