触摸Quartz 2D / Core Graphics中的绘图

时间:2010-06-01 17:38:28

标签: iphone objective-c core-graphics quartz-graphics quartz-2d

我正在尝试实施“手绘工具”。 目前algorythm看起来像那样(我没有插入任何代码因为方法很大,会尝试解释一个想法):

图纸

  1. touchesStarted:方法中,我创建 NSMutableArray * pointsArray 并在其中添加点。调用 setNeedsDisplay:方法。
  2. touchesMoved:方法中,我计算pointsArray和当前点之间最后添加点之间的点数。将所有点添加到pointsArray。调用 setNeedsDisplay:方法。
  3. touchesFinished:事件中,我计算数组中最后添加的点与当前点之间的点数。设置标志 touchesWereFinished 。致电 setNeedsDisplay:
  4. 渲染:

    drawRect:方法检查是 pointsArray!= nil ,其中是否有任何数据。如果有 - 它开始在这个数组的每个点上拖动圆圈。如果设置了标志 touchesWereFinished - 将当前上下文保存到 UIImage ,请释放pointsArray,将其设置为 nil 并重置标记。

    这种方法有很多缺点:

    • 很慢
    • 当用户长时间触摸并移动手指时变得非常慢。数组变得巨大
    • 由圆圈组成的“线条”很丑陋

    我想更改算法,使其更快,线条更平滑。 结果我想在下面的网址上有相似的图片(抱歉,没有足够的声誉来插入图片):http://2.bp.blogspot.com/_r5VzEAUYXJ4/SrOYp8tJCPI/AAAAAAAAAMw/ZwDKXiHlhV0/s320/SketchBook+Mobile(4).png

    你能告诉我,我能用这种方式划线(边缘光滑细腻)吗?我想在边缘绘制带有alpha渐变的圆圈(使线条更平滑),但是它会非常缓慢恕我直言。

    感谢您的帮助

    更新

    我改变了绘制算法。现在我保存的每个事件 UITouch ,并且在 drawRect:方法中,我从prev中绘制路径。指向当前的一个。并在每次 drawRect:调用时从上下文中转储 UIImage

    但我还有两个问题:

    1. 是否可以画得更流畅。我的意思是如果画得很快,我很容易就能看到路径是一组直线。但我想绘制曲线,使路径平滑。可能Bezier曲线会有所帮助,但我不明白他们如何在这方面提供帮助。 情况。
    2. 我想用更细的线开始路径并且也用更好的线完成。我怎么能做这个线变换? 谢谢!

0 个答案:

没有答案