每当我使用 setNeedsDisplay 调用 drawRect 时,Iim会显示大量图片。 问题是导致滞后导致每次调用 dracRect 时,我会重绘每个图像(数千个)。
有没有办法不重绘所有图像。我的意思是,保留所有图像并绘制我想要绘制的图像?
感谢,
答案 0 :(得分:1)
避免重绘所有内容的一种方法是调用setNeedsDisplayInRect:
而不是setNeedsDisplay:
,并仅传递包含需要重绘的图像的矩形。当然,这意味着您的drawRect
不能再忽略传入的矩形:浏览图像,并检查图像是否与正在重绘的矩形重叠。如果没有重叠,请跳过图像并在重绘时节省一些CPU时间。
请注意,这是维护视图的一种非常“手动”的方式。考虑使用iOS为您提供的一些组件,例如UICollectionView
,它允许您使用非常少的代码在屏幕上显示大量内容。
答案 1 :(得分:0)
您必须将内容拆分为多个视图或图层(CALayer
)。然后只重绘其内容实际需要更改的视图或图层。
答案 2 :(得分:0)
将视图拆分为不同的视图(或图层),这将使系统能够缓存其内容并更快地重绘。
我不知道你的用例,但有数百张图片,我会考虑使用OpenGL。