Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone can';画得不够快,跟不上触摸移动?_Iphone - Fatal编程技术网

Iphone can';画得不够快,跟不上触摸移动?

Iphone can';画得不够快,跟不上触摸移动?,iphone,Iphone,我正在尝试在我的iPhone应用程序中实现简单的绘画功能。我尝试用位图画笔更新位图,我也尝试了 两种方法都有相同的问题,尽管代码几乎完全不同。它只发生在设备上-模拟器工作正常 当我触摸屏幕并移动手指时,屏幕不会更新。当我暂停或抬起手指时,屏幕就会更新。这不是一个很好的用户体验 我尝试直接从TouchsMoved调用drawRect,但发现绘图上下文(我使用UIGraphicsGetCurrentContext检索)对许多调用无效,因此为每个TouchsMoved绘制屏幕无法工作 有什么想法吗 谢

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

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

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

我尝试直接从TouchsMoved调用drawRect,但发现绘图上下文(我使用UIGraphicsGetCurrentContext检索)对许多调用无效,因此为每个TouchsMoved绘制屏幕无法工作

有什么想法吗

谢谢你的帮助,这让我很沮丧


Henning

您不能直接调用
drawRect
:。若要按需刷新屏幕,请尝试从您的
touchsmoved
方法调用
[self-setNeedsDisplay]
,该方法将为调用
drawRect:
设置适当的上下文。我觉得您好像没有给主运行循环更新显示的机会。图形代码的执行时间可能比触摸事件之间的时间长,因此显示永远不会更新。当您抬起手指时,它会进行更新,因为它不再承受绘图的负担

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


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

谢谢,但我尝试了从TouchsMoved进行[self-setNeedsDisplay]。这没用,我试试看会怎么样。多谢各位。