在我的iOS应用程序中,我创建了一个视图,用于在绘制时实时绘制使用UIBezierPath
的手指绘制的路径。不幸的是,由于路径变长(几百个顶点),我遇到了性能问题,并且每次刷新视图时绘制整个路径变得不切实际。递增添加到UIView
我试着将路径分成许多不同的片段,这允许我只画出在drawRect:
中传递给我的矩形中的片段,这对显着帮助很大,但绘制仍然很慢;当部分添加到已包含部分路径的屏幕区域中的路径中时,许多分段不必要地重绘。
我不删除视图中任何东西,所以我试图让clearsContextBeforeDrawing
和只画最新片段每次drawRect:
被调用,但似乎有在网上暗示,这家酒店没有按”大量的轶事证据没有做任何事情,我也似乎无法让它工作。
加速绘图的最佳方法是什么?
从我读过的内容看,我的最佳选择是绘制到(离屏)位图上下文,因此我可以一点一点地添加并将其复制到屏幕上显示的图形上下文中,但我也阅读在分配上下文时以及在将图像渲染到屏幕时需要进行RGBA到RGB转换时,这通常很慢。
它看起来像我可能能够做一些涉及CALayer
(无论是否带有屏幕外缓冲区) - 我不清楚在一个图层上如何绘图以及是否会绕过我所见过的任何问题。该contents
属性接受CGImageRef
;我可以制作一个CGImage
然后更新它增量没有重新绘制所有内容?另外,是否可以在不重绘整个事物的情况下添加CALayer的内容?
任何见解将不胜感激。
编辑:对于恩惠,请提供的如何正确地初始化图像缓冲器,绘制三次贝塞尔路径在其上的示例,并且将其复制到适当的屏幕。也请记下为什么要使用你的方法 - 我不知道如果使用CGBitmapContextCreate
是最好的方式,或者如果有其他我应该使用的。
(I'如果可能的话,我喜欢避免使用OpenGL ES,因为在我看来,添加相当多的实现复杂性,考虑到我对OpenGL没有什么了解。) – 2011-06-13 03:56:55