【问题标题】:SCrollView UpdatesSCrollView 更新
【发布时间】:2014-04-13 13:37:01
【问题描述】:

我正在使用这种方法:

  - (void)scrollViewDidScroll:(UIScrollView *)scrollView 

我得到了滚动视图偏移的更新。问题是我的滚动视图经常自我更新。有没有办法减少更新间隔?

【问题讨论】:

  • 你想达到什么目的?当滚动视图 didScroll 时,你每次都得到它是完全没问题的
  • 不,但您可以自己调整。保留您上次使用的值的时间,并比较您获得新值时的实际时间...
  • 使用NSTimer来积累消息,这样做的例子很多。

标签: ios uiscrollview scrollview


【解决方案1】:

这是使用计时器来实现此目的的草稿:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (!_delayTimer) {
        _delayTimer = [NSTimer scheduledTimerWithTimeInterval:.2
                               target:self selector:@selector(delayed)
                               userInfo:nil repeats:NO];
    }
}

- (void)delayed {
    _delayTimer = nil;
    [self doSomething:_scrollView.contentOffset];
}

【讨论】:

    【解决方案2】:

    您将不得不按照您想要的方式过滤结果。我在 webView 中执行相同操作,将动画频率从 60 赫兹更改为 30 赫兹。在我的示例中,我们每 0.03 秒使用一次 scrollviewDidScroll 结果。这可以修改为您想要的任何数量。

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    {
        static NSDate *date;
        if(!date)
            date = [NSDate date];
    
        //Check if we have gone long enough since the last desired update
        if([[NSDate date] timeIntervalSinceDate:date] > .03)
        {
            //Enough time has passed, do your updates here
            date = [NSDate date];
        }
    }
    

    【讨论】:

    • 这是个坏主意,你会错过一些事件,并且不能保证你的控制器状态是最后滚动值。即如果视图在 0.03 秒内滚动,您只会丢失数据。即使 .03 不是那么多,这取决于他想做什么,这可能很重要
    • @VincentG 这是真的。但他说他得到了太多的事件。这是一种减少他“看到”的事件数量的方法。这些事件仍然会发生,但他只会“看到”其中的一小部分(这是他所要求的)。这与您的答案几乎相同,但不那么复杂。
    猜你喜欢
    • 2023-03-15
    • 2016-06-11
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多