我有一个带有(自定义)UIView的UIScrollView。
在我的scrollViewDidScroll方法中,我正在调用
[myCustomView setNeedsDisplay];
如果我在自定义UIView中实现drawRect:方法,即使它完全为空,这会使滚动明显变慢。
一旦我删除了drawRect:方法,它就会再次平滑。
我完全不知道,为什么......你们中的任何人?
答案 0 :(得分:3)
我也讨厌画笔
“这是因为硬件加速动画在Cocoa中的运作方式。
如果您没有自定义drawRect方法,系统会在视频内存中缓存视图的像素。当需要重绘它们时,它只是将像素点亮到屏幕上。
如果你有一个自定义的drawRect方法,系统必须调用你的drawRect方法来渲染主存储器中的像素,然后将这些像素复制到视频存储器中,然后将每个帧的像素绘制到屏幕上。如果可以,文档会说要避免使用drawRect。
我认为主内存和视频内存在大多数/所有iOS设备上共享,但是当您为视图实现drawRect方法时,系统还有很多工作要做。
使用OpenGL层并使用OpenGL调用渲染它可能会更好,因为OpenGL直接与显示硬件对话。“