- (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);
}
}
我有一个问题,滚动 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);
}
}