0

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

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

谢谢,

4

3 回答 3

1

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

请注意,这是维护视图的一种非常“手动”的方式。考虑使用 iOS 为您提供的一些组件,例如UICollectionView,它可以让您用很少的代码在屏幕上显示很多东西。

于 2013-04-12T14:16:07.883 回答
0

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

于 2013-04-12T14:14:28.423 回答
0

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

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

于 2013-04-12T14:17:23.223 回答