uiscrollview - drawRect 使 UIScrollView 中的滚动速度变慢

标签 uiscrollview drawrect setneedsdisplay

我有一个 UIScrollView,里面有一个(自定义)UIView。

在我调用的scrollViewDidScroll方法中

[myCustomView setNeedsDisplay];

如果我在自定义 UIView 中实现 drawRect: 方法,即使它完全是空的,这也会使滚动速度明显变慢。

一旦我删除了drawRect:方法,就又顺利了。

我完全不知道,为什么......你们中的任何人?

最佳答案

我也讨厌drawrect

“这是因为硬件加速动画在 Cocoa 中的工作方式。

如果您没有自定义的drawRect方法,系统会在视频内存中缓存 View 的像素。当需要重绘它们时,它只是将像素传输到屏幕上。

如果您有自定义的drawRect方法,则系统必须调用您的drawRect方法来渲染主内存中的像素,然后将这些像素复制到视频内存中,然后将每一帧的像素绘制到屏幕上。文档说如果可以的话要避免使用drawRect。

我认为主内存和视频内存在大多数/所有 iOS 设备上都是共享的,但是当您为 View 实现 drawRect 方法时,系统仍然有很多工作要做。

您可能会更好地使用 OpenGL 层并通过 OpenGL 调用进行渲染,因为 OpenGL 直接与显示硬件对话。”

链接到该报价:http://www.iphonedevsdk.com/forum/iphone-sdk-development/80637-drawrect-makes-scrolling-slow-uiscrollview.html

关于uiscrollview - drawRect 使 UIScrollView 中的滚动速度变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017270/

相关文章:

iphone - 停止 UIButtons 干扰 UIScrollView

ios - 在 UIScrollview 上缩放图像后,它滚动到图像区域之外

ios - UIView setNeedsDisplay 不起作用

swift - 创建循环进度条的问题

ios - JSON 请求后使用新数据刷新 View Controller

ios - 重新加载/刷新 subview - setNeedsDisplay 不起作用

ios - 如何更改 UIScrollView contentOffset 动画速度?

ios - 如何更新框架的高度?

iphone - UIScrollView 滚动时重绘内容?

swift - 像 Paper.io 一样在形状中填充颜色