【问题标题】:CGContext Draw Line slowly responding to fast finger movementCGContext Draw Line 缓慢响应快速手指移动
【发布时间】:2010-09-03 04:37:54
【问题描述】:

我正在使用 CGContext 在手指触摸上画线。 如果手指在屏幕上缓慢移动,则效果很好……但问题是,如果手指快速移动,则线条会滞后于手指。我的意思是在手指触摸该点一秒钟后,该线在该点绘制(太烦人了——这不是模拟器上的问题,而只是设备上的问题)。 其次,如果我用它画一条曲线,曲线就会非常有角度——我的意思是曲线不是很平滑 请帮忙(我不想使用OpenGL,有没有其他解决方案)

编辑:-

抱歉,我是个菜鸟……不太了解 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 方法中,我调用了视图的setNeedsDisplay 方法。

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

【问题讨论】:

  • 在 uiview 的 drawrect 方法中 - CGCOntextbeginpath、movetopoint、addlinetopoint、strokepath、closepath....正如我所说,它在正常的手指运动上完美工作,但是当手指在设备上快速移动时,它是滞后的

标签: iphone


【解决方案1】:

我找到了第二个问题的答案,即绘制平滑的非角度曲线。为此,您必须使用四边形曲线。我在很多地方找到了这个答案,但找不到如何使用四边形曲线..不知何故我从一些 android 示例中弄清楚了,所以我将在这里发布基本想法...... 假设你得到了手指触摸的点(通过 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);

等等……

【讨论】:

  • IPhone_bharat - 你介意分享绘图部分的完整代码吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2011-09-28
    • 1970-01-01
    • 2012-12-30
    相关资源
    最近更新 更多