【问题标题】:UIScrollView: getting a better presicion on contentOffset in scrollViewDidScroll:UIScrollView:在 scrollViewDidScroll 中的 contentOffset 上获得更好的精度:
【发布时间】:2015-11-28 19:53:02
【问题描述】:

我正在尝试基于UIScrollView 代表,特别是scrollViewDidScroll: 来实现一些东西。所以我在委托方法中阅读了scrollView.contentOffset,它工作得很好,直到我开始更快地滚动,然后contentOffset 在 Y 坐标上最多跳过 50 个点:

有谁知道如何获得contentOffset更好的精度

【问题讨论】:

  • 使用更精确的scrollViewDidEndScrollingAnimation。
  • 但是一旦动画结束就会调用scrollViewDidEndScrollingAnimation:当滚动视图中的滚动动画结束时告诉代理。滚动视图在 setContentOffset:animated: 和 scrollRectToVisible:animated: 方法的实现结束时调用此方法,但仅限于请求动画时。
  • 如果您有相同的解决方案,请通知我。我也面临同样的问题。
  • 你有什么解决办法吗?我面临同样的问题。如果你有答案,请告诉我,谢谢
  • 我的猜测是,如果用户滚动得足够快,总会有跳转。我认为 UIKit 在每个动画帧(1/60 秒)多次更新 contentOffset 的值是没有意义的。也许您可以记录调用委托方法的时间戳,并查看每次调用发生的时间间隔(不是距离)。

标签: ios objective-c uitableview cocoa-touch uiscrollview


【解决方案1】:

KVO 会在每次更改时提供消息,但您在观察中所做的工作 方法应该快点完成,以免造成滞后...

开始观察:

// assuming you have a scroll view outlet property
[self.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];

观察变化:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
    if (object == self.scrollView) {
        NSLog(@"%f", self.scrollView.contentOffset.y);
    }
}

停止观察:

[self.scrollView removeObserver:self forKeyPath:@"contentOffset"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多