我正在使用UIScrollView
来显示自定义UIView
。当用户drags
手指穿过UIScrollView
时,在显示开始更新之前会有明显的延迟。如果用户保留touching
屏幕,UIScrollView
会在短时间内变得非常敏感。随后尝试scroll
导致相同的初始延迟,然后是高响应性。这种延迟严重影响了视图的可用性,我想摆脱它。
在我写的一个测试项目中,我试图找到这个问题的底部,我只能部分地复制这个行为。用户scrolls
第一次完全相同 - 但是scroll
的任何后续尝试都会立即响应。
我已经尝试设置delaysContentTouches = NO
和子类化UIScrollView
,以便touchesShouldBegin returns NO
按照多个地方在线建议,但都没有效果。
我在MonoTouch
上使用iOS 4.3
,但Objective-C
答案很好。我会发布代码以帮助说明问题,但由于我无法缩小问题,这将超过1000行。希望这足以获得解决方案。
有谁知道可能导致这种延迟的原因,以及我如何摆脱它?
答案 0 :(得分:2)
一些提高滚动性能的一般建议。
让您的滚动视图在屏幕外光栅化:
myView.layer.shouldRasterize = YES;
为scrollview上的每个子视图设置该属性 - 不要为这些子视图的子视图设置它,否则你就会以这种方式吃掉内存。
如果滚动视图不需要合成,请确保关闭该混合:
myView.opaque = YES;
利用iOS模拟器调试菜单中显示的这两个功能,使用模拟器进行测试:
如果这不能解决您的问题,并且您已经实现了UIScrollViewDelegate,请仔细检查以确保您在这些方法中没有花费任何时间 - 例如,根据您的描述,您可能正在做某事< strong> scrollViewDidScroll , scrollViewWillBeginDragging ,或 scrollViewWillBeginZooming ,如果您愿意,请优化,以便在滚动开始之前进行优化。此外,请确保您没有在 touchesBegan 中执行任何操作。
答案 1 :(得分:2)
我怀疑发生了什么事情是滚动视图的内容中启用了某种交互。
系统不知道初始触碰是否会轻击其中一个子视图或拖动滚动视图,因此在等待查看您是否要抬起手指时会造成延迟
UIScroll视图的子视图是什么?
作为一个实验设置所有 UIScrollView的子视图有userInteractionEnabled = NO
,这不是你想要的,但它只是一个测试。在此之后应该滚动好,否则我错了。