【问题标题】:ContentOffset issue in UIScrollviewUIScrollview 中的 ContentOffset 问题
【发布时间】: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,是的,你说得对。但是我怎样才能达到这个条件呢?有没有其他方法可以实现?
  • 你的目标是什么?

标签: ios objective-c if-statement uiscrollview contentoffset


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多