Asp*_*pyn 1 memory iphone core-graphics lag uikit
我使用UIBezierPath进行手指绘画(我的应用程序).我使用path = [UIBezierPath bezier path]创建它; .它经常滞后于iPad(并且从内部调用它并没有改变任何东西).我已经连续数小时研究这个问题并且没有找到解决方案,只是滞后.请问有人帮我吗?另外,我使用NSTimer来调用该函数.这是我的应用程序将工作的旧方式,所以请帮我修复这个lagggg !!!!!
Pet*_*sey 10
由于你的问题都没有包含足够的细节,我会做一些不正确的事情,并在你 目前的 最后 五个 问题上发表元回答.
首先,吸引drawRect:而不是其他.
那太重要了,我要再说一遍.
在绘制drawRect:和其他地方.
没有touchesMoved:withEvent:.
不是touchesBegan:或Ended:.
drawRect: 而在其他任何地方.
如果你要将图像保存到文件中,这是一回事.但是当你画到屏幕上时,你不会在其他地方做任何事情drawRect:.
认真.这很重要.
第2步:不要试图强迫绘图在任何其他时间发生.
drawRect:叫你时,它的时间为您绘制.根据定义,在任何其他时间,您不需要绘制,因此绘图是做您不需要做的事情.通过扩展,不要打电话给drawRect:自己.你不需要,也从来没有帮助.
实际上,这只是步骤1的扩展.如果您打电话drawRect:,那么如果您有接到电话的绘图代码,则没有什么不同.绘图代码不会在任何地方重复,这很好,但它仍然在错误的时间运行.我们drawRect:只有在系统调用它来调用.
setNeedsDisplay存在告诉系统是时候绘制了.只有当某些事情发生了变化,您才需要绘制时,您应该这样做.您的视图的属性,模型中的某些内容 - 无论您将绘制哪些更改,都会发送给自己setNeedsDisplay.不要在任何其他时间做; 你不需要.
切掉计时器.你不需要它.无论如何,已经有一个计时器,限制你到60 fps.
核心图形不会滞后.不,真的,它没有.缓慢或"滞后"是因为你要么做得太多,要么你做错了.
不要不必要地缓存.你正在做的事情都不需要图像缓存.
"滞后"是因为你试图从touchesMoved:withEvent:和/或touchesBegan:/中绘制或强制绘图Ended:.往上看.
这是你需要做的:
在您的touchesBegan:/ Moved:/ Ended:方法或其他适当的响应方法中,更新您的状态.这将包括Bézier路径.不要画,包括不要打电话drawRect:或以其他方式强行画画.
在您更新了州之后,只有在您这样做的情况下,发送给自己setNeedsDisplay.
在你的drawRect:方法中,只有在你的drawRect:方法中,绘制路径,渐变,等等,无论你认为合适.
做这些事情,你的申请会很快.使用核心图形.没有滞后.
另外,一些重要的阅读:
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |