使用Core Graphics以30-60 fps的速度手动移动/旋转物体

时间:2011-06-02 11:15:26

标签: iphone cocoa-touch ios core-graphics quartz-graphics

我有一个循环运行在一个单独的线程更新东西的位置和旋转,它运行在足够的FPS并最终在主线程上调用setNeedsDisplay。问题是框​​架没有足够的时间调用drawRect,平均每秒我得到10次drawRect(FPS)调用。我试过调用CATransaction flush但它似乎根本没有效果。

我正在做的绘图是CGContextShowTextAtPoint。在旋转周围环境之后,这就是它。有什么方法让我以更高的频率画画吗?我不想使用openGL或cocos2d,因为绘图代码工作得很好。

3 个答案:

答案 0 :(得分:0)

我建议在主线程上设置一个NSTimer,每隔1.0/301.0/60秒调用一次drawRect。

也许在单独的线程上运行的代码在整个系统上工作太难了。因此,主线程没有足够的计算资源来经常更新视图。如果永远不会显示额外的数据帧,那么“绰绰有余的FPS”可能只是浪费了计算。更新位置和旋转后,单独的线程是否可以暂停并等待主线程在计算下一个位置和旋转之前更新视图? NSTimer可以向第二个线程发送消息以计算下一帧的数据。

答案 1 :(得分:0)

调用setNeedsDisplay不会导致视图立即重绘,它只是将视图标记为脏,这将导致在下一个绘制周期重绘它。

我认为使用setNeedsDisplay方法很难实现快速流畅的动画。

您是否尝试过使用核心动画?

最后一点说明:如果你使用setNeedsDisplay,请确保你总是从主线程中调用它。

答案 2 :(得分:0)

我最终使用Cocos2d进行旋转等动画。似乎使用Core Graphics以那些FPS速率手动移动东西太痛苦了,并且需要采用hackish方法。

相关问题