setNeedsDisplay没有刷新屏幕

时间:2013-04-12 14:13:04

标签: ios objective-c drawrect lag setneedsdisplay

每当我使用 setNeedsDisplay 调用 drawRect 时,Iim会显示大量图片。 问题是导致滞后导致每次调用 dracRect 时,我会重绘每个图像(数千个)。

有没有办法不重绘所有图像。我的意思是,保留所有图像并绘制我想要绘制的图像?

感谢,

3 个答案:

答案 0 :(得分:1)

避免重绘所有内容的一种方法是调用setNeedsDisplayInRect:而不是setNeedsDisplay:,并仅传递包含需要重绘的图像的矩形。当然,这意味着您的drawRect不能再忽略传入的矩形:浏览图像,并检查图像是否与正在重绘的矩形重叠。如果没有重叠,请跳过图像并在重绘时节省一些CPU时间。

请注意,这是维护视图的一种非常“手动”的方式。考虑使用iOS为您提供的一些组件,例如UICollectionView,它允许您使用非常少的代码在屏幕上显示大量内容。

答案 1 :(得分:0)

您必须将内容拆分为多个视图或图层(CALayer)。然后只重绘其内容实际需要更改的视图或图层。

答案 2 :(得分:0)

将视图拆分为不同的视图(或图层),这将使系统能够缓存其内容并更快地重绘。

我不知道你的用例,但有数百张图片,我会考虑使用OpenGL。