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