- (void)scrollViewDidScroll:(UIScrollView *)scrollView 在 iOS 8 中太慢

- (void)scrollViewDidScroll:(UIScrollView *)scrollView too slow in iOS 8

我有一个问题,滚动 up/down 并在辅助 scrollview 上从 scrollviewdidscroll 内设置 contentoffset 会导致轻微的抖动行为......或更准确地说是低帧率.

我目前依靠 scrollViewDidScroll 来管理我的 UIScrollView 中的视差等效果,这些效果是通过监听 scrollViewDidScroll 来应用的,但是每次调用的周转时间这种方法(出于某种原因)太慢并且导致足够的延迟使其在滚动时看起来有点糟糕。

有趣的是,iOS 9,运行良好。

我试过其他方法,例如关闭图像或使用 AsyncDisplayKit,但两者都对触发 scrollViewDidScroll 的次数没有影响。

在我看来,我可能需要重新设计我创建视差效果的方式,但我犹豫是否有快速修复的方法。

将所有效果放在下面的方法中。

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

请将代理方法放在下方以改进和检测滚动

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{

   //Your code here
}

首先 - 使用 Xcode Instruments 调试工具 "Time Profiler"(Xcode 菜单 Product->Profile,然后 select Instruments 的 Time Profiler)。

不要忘记检查 "Invert Call Tree" 和 "Hide System Libraries" 复选标记,并检测代码中的问题所在。

之后你可以找到一些解决方案。

至少你可以尝试在为第二个滚动视图设置 contentOffset 属性 之前添加额外的检查:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat contentOffsetForSecondScrollView = 123.0; // Calculate second scroll view content offset
    // Add additional check, if content offset doesn't change
    if (self.secondScrollView.contentOffset.y != contentOffsetForSecondScrollView) {
        self.secondScrollView.contentOffset = CGPointMake(0, contentOffsetForSecondScrollView);
    }
}