CGContext绘制线慢慢响应快速手指移动

时间:2010-09-03 04:37:55

标签: iphone

我正在使用CGContext在手指触摸上绘制线条。 如果手指在屏幕上缓慢移动,它可以完美地工作......但问题是如果手指快速移动,则线条会滞后于手指。我的意思是在该点触摸手指后一秒钟的线条绘制一个点(非常烦人 - 这不是模拟器上的问题,而只是在设备上)。 其次,如果我绘制一条曲线,曲线变得很有角度 - 我的意思是曲线不是很平滑 请帮忙(我不想使用OpenGL,还有其他解决方案)

编辑: -

很抱歉,但我是一个noobe ...不太了解hotpaw在下面说过的内容......但这是我的代码

-(void) draw rect{
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, beginpointX, beginpointY);
CGContextSetStrokeColorWithColor(ctx, CGColor);
CGContextAddLineToPoint(ctx,currentpointX,currentpointY);
CGContextSetLineCap(ctx, kCGLineCapRound);
CGContextStrokePath(ctx);
CGContextSetLineJoin(ctx, kCGLineJoinRound);
CGContextClosePath(ctx);

在我的touchesBegantouchesmoved方法中,我调用了view的setNeedsDisplay方法。

不知道有多少帧/秒或触摸事件......请帮助它非常紧急

2 个答案:

答案 0 :(得分:2)

我找到了第二个问题的答案,即绘制平滑的非角度曲线。因为你必须使用四边形曲线。我在很多地方找到了这个答案,但是找不到如何使用四条曲线..我从一些安卓示例中找到了解决方法,所以我会在这里发布基本想法...... 假设你手指触摸点(通过touchesmoved方法),如firstpoint,secondpoint,thirdpoint等,那么

 CGContextMovetoPoint(ctx,firstpoint); CGContextAddQuadCurveToPoint(context,secondpoint.x,secondpoint.y,(secondpoint.x+thirdpoint.x)/2,(secondpoint.y+thirdpoint.y)/2);
CGContextAddQuadCurveToPoint(context,thirdpoint.x,thirdpoint.y,(thirdpoint.x+forthpoint.x)/2,(thirdpoint.y+forthpoint.y)/2);

依旧......

答案 1 :(得分:0)

您(重新)绘制的帧速率以及touchesMoved事件的进入率是多少?绘制速度超过每秒30到60帧没有价值。如果您每秒尝试(重新)绘制线条的次数多于此次,那么您可能会阻止UI响应链并丢失触摸移动事件,以及浪费CPU / GPU /电池。

查看Apple的一个示例应用程序,了解如何执行此操作。 (GLPaint?FingerPaint?)