不能画得足够快以跟上touchesMoved?

时间:2009-03-05 16:19:10

标签: iphone

我正在尝试在我的iPhone应用程序中实现简单的绘图功能。我尝试使用位图画笔更新位图,我也尝试了this tutorial

两种方法都有相同的问题,即使代码几乎完全不同。它只发生在设备上 - 模拟器工作正常。

当我触摸屏幕并移动手指时,屏幕不会更新。当我暂停或抬起手指时,屏幕会更新。这不是一个非常好的用户体验!

我尝试直接从touchesMoved调用drawRect,但发现绘图上下文(我使用UIGraphicsGetCurrentContext检索)对于许多调用都是无效的,因此每次touchesMoved自己绘制屏幕都不起作用。

有什么想法吗?

感谢您的帮助,这非常令人沮丧!

亨宁

2 个答案:

答案 0 :(得分:2)

听起来像你没有给主运行循环提供更新显示的机会。您的绘图代码执行时间可能比触摸事件之间的时间长,因此显示永远不会更新。当你抬起手指时,它会进行更新,因为它不再受到你的绘图负担。

您可以考虑优化绘图以加快速度(例如,仅在屏幕的脏区域内绘制),使用NSOperationQueue之类的方法将绘图的繁重计算排队以在后台线程上运行,或者有选择地删除触摸绘图事件以保持您的响应顺利。

另一种可能性是将重绘图代码放在一个单独的方法中,并通过performSelector:withObject:afterDelay调用它,延迟为10毫秒(或更小)。这可能会使主运行循环有机会以其当前状态更新显示。我没有测试过这个,但如果我没记错的话,我已经看过这个了。

答案 1 :(得分:0)

您无法直接致电drawRect:要按需刷新屏幕,请尝试使用[self setNeedsDisplay]方法拨打touchesMoved,这样可为drawRect:的来电设置正确的上下文。