CoreGraphics在触摸时调用drawrect时是否有任何可能的延迟?

时间:2011-10-02 14:44:22

标签: iphone core-graphics drawrect lag

我从触摸移动调用setNeedsDisplay(并且还尝试不从触摸移动调用,而是从0.05计时器调用)并且drawrect方法总是滞后。他们无论如何要改变这个?我正在做很多绘图,但我不知道解决方案来解决滞后问题。即使计时器以1.0的间隔被调用,当计时器调用选择器时仍然滞后。此外,我没有泄漏(我使用Xcode分析功能检查)。请帮忙!!

编辑:我正在调用setNeedsDisplay,而不是来自我的计时器/方法的drawRect

编辑:似乎无论核心图形在哪些地方都有很多绘图,它总是滞后。我很肯定我没有内存泄漏,我甚至创建了另一个绘画应用程序并且它滞后(对此有什么解决方法?请帮助我)

4 个答案:

答案 0 :(得分:4)

对其中一个答案进行了略微编辑的评论记录:

  

我正在绘制一种基于色调的颜色选择器的颜色(在绘制矩形中绘制每个色调值的行)

     
    

......你在画360个矩形吗?

  
     

是的,我是......。

     

我将360个不同颜色的矩形图像绘制到一个UIImageView的图像中。比我释放矩形。 (我使用for循环进行矩形分配/释放)

所以,你这样做了360次:

  1. 创建图片。
  2. 在此图像中绘制一个矩形。 (或者,如果步骤1从文件加载图像,则不是。)
  3. 将该图像绘制成另一幅图像。
  4. 发布图片。
  5. 然后将您绘制的所有较小图像的图像传递给UIImageView进行实际显示?

    听起来你正试图在图像中缓存它,如果你做得对,这应该在第一次之后有所帮助,但这不需要首先放慢速度。

    您已拥有自定义视图。删除图像视图,并剪切所有这些矩形绘图(或图像绘制)代码。如果您的图像文件包含单独的彩色矩形,请将其删除。

    在您的视图中drawRect:create a gradientdraw that。你的drawRect:长三行,应该更快,更快。

答案 1 :(得分:2)

您不应该明确地致电drawRect。改为使用setNeedsDisplay,系统准备就绪时将执行绘图。

编辑: 基于你已经这样做的事实。你的问题是你的drawRect太慢了。你想要画什么?

答案 2 :(得分:2)

  

我从触摸移动中调用drawrect

don't do that.

  

(并且还尝试不从触摸移动调用,而是从0.05计时器调用)

don't do that.

  

并且drawrect方法总是滞后的。他们无论如何要改变这个?我正在做很多绘图,但我不知道解决方案来解决滞后问题。即使计时器以1.0的间隔被调用,当计时器调用选择器时仍然滞后。此外,我没有泄漏(我使用Xcode分析功能检查)。请帮忙!!

Yes!

答案 3 :(得分:0)

如果您可以找出屏幕的哪些部分需要更改,您可以通过重新绘制更改的矩形而不是整个屏幕来调用setNeedsDisplayInRect以加快速度。

您还可以运行后台线程来准备缓冲区中的帧并使用它在屏幕上绘制。这取决于你正在做的绘画类型。以下是我在此主题中找到的blog post

或者您可以使用OpenGL ES来绘制。