我需要根据从服务器接收到的数据来画线,并且我试图避免每次收到新点时都重新绘制整个内容,因此我想到了:

  • 重新使用CGContextRef,仅画一条新点或
  • 的线
  • 使用UIMutablePath并在路径中添加新的指针行,然后描画路径

  • 但我发现了问题:
  • 重用CGContextRef不起作用,为什么? (即我可以UIGraphicsGetCurrentContext()中的drawRect,但是我不能在方法之外保留和使用它)
  • 重绘路径是否比使用CGContextRef重绘效率低?

  • 谢谢!

    最佳答案

    不要尝试重用通过UIGraphicsGetCurrentContext()获得的图形上下文。不支持它,它将导致不稳定的行为。

    如果重复调用drawRect导致性能问题,那么有两种策略可能会有所帮助:

  • 减少调用setNeedsDisplay的频率。如果网络数据迅速进入,则可以在每次有新数据进入时设置一个NSTimer。例如,在0.5秒或更长时间后让计时器启动(您会比我更了解谨慎的做法)。如果在计时器启动之前有新数据进入,请重置计时器。如果计时器在没有新数据到达的情况下触发,请调用setNeedsDisplay。这将限制绘图调用。
  • 如果您的绘图代码确实很昂贵,则可以使用UIGraphicsBeginImageContext和UIGraphicsEndImageContext调用将其移至后台线程,您可以在二者之间进行绘图,然后将该上下文呈现为UIImage,并通过完成块将UIImage传递回给主队列。然后,您可以在drawRect中绘制该图像,或将其用作UIImageView的image属性。
  • 关于ios - iOS:重用CGContextRef?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18845462/

    10-10 18:44