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