UIScrollView - 如何在滚动之前摆脱延迟?

时间:2011-12-10 12:39:47

标签: iphone objective-c uiscrollview xamarin.ios addsubview

我正在使用UIScrollView来显示自定义UIView。当用户drags手指穿过UIScrollView时,在显示开始更新之前会有明显的延迟。如果用户保留touching屏幕,UIScrollView会在短时间内变得非常敏感。随后尝试scroll导致相同的初始延迟,然后是高响应性。这种延迟严重影响了视图的可用性,我想摆脱它。

在我写的一个测试项目中,我试图找到这个问题的底部,我只能部分地复制这个行为。用户scrolls第一次完全相同 - 但是scroll的任何后续尝试都会立即响应。

我已经尝试设置delaysContentTouches = NO和子类化UIScrollView,以便touchesShouldBegin returns NO按照多个地方在线建议,但都没有效果。

我在MonoTouch上使用iOS 4.3,但Objective-C答案很好。我会发布代码以帮助说明问题,但由于我无法缩小问题,这将超过1000行。希望这足以获得解决方案。

有谁知道可能导致这种延迟的原因,以及我如何摆脱它?

2 个答案:

答案 0 :(得分:2)

一些提高滚动性能的一般建议。

让您的滚动视图在屏幕外光栅化:

myView.layer.shouldRasterize = YES;

为scrollview上的每个子视图设置该属性 - 不要为这些子视图的子视图设置它,否则你就会以这种方式吃掉内存。

如果滚动视图不需要合成,请确保关闭该混合:

myView.opaque = YES;

利用iOS模拟器调试菜单中显示的这两个功能,使用模拟器进行测试:

  • 彩色屏幕外渲染
  • 颜色混合图层

如果这不能解决您的问题,并且您已经实现了UIScrollViewDelegate,请仔细检查以确保您在这些方法中没有花费任何时间 - 例如,根据您的描述,您可能正在做某事< strong> scrollViewDidScroll , scrollViewWillBeginDragging ,或 scrollViewWillBeginZooming ,如果您愿意,请优化,以便在滚动开始之前进行优化。此外,请确保您没有在 touchesBegan 中执行任何操作。

答案 1 :(得分:2)

我怀疑发生了什么事情是滚动视图的内容中启用了某种交互。

系统不知道初始触碰是否会轻击其中一个子视图或拖动滚动视图,因此在等待查看您是否要抬起手指时会造成延迟

UIScroll视图的子视图是什么?

作为一个实验设置所有 UIScrollView的子视图有userInteractionEnabled = NO,这不是你想要的,但它只是一个测试。在此之后应该滚动好,否则我错了。