【问题标题】:Improving Drawing Performance (for Dudel application)提高绘图性能(适用于 Dudel 应用程序)
【发布时间】:2012-04-09 10:17:40
【问题描述】:

我需要创建一个小型绘图/绘画应用程序,所以我求助于Beginning IPad Development for IPhone Developers: Mastering the IPad SDK By Jack Nutting, Dave Wooldridge, David Mark

挺好看的。架构很强大。但是,绘图应用程序(Dudel)在性能方面并不是很好。有两个主要问题(对我来说,目前):

  1. 最重要的一点:绘图会在一段时间后变慢。原因:每次都为所有路径调用drawRect
  2. 使用铅笔工具绘图不流畅。原因:它使用addLineToPoint: 而不是(可能是)addQuadCurveToPoint:
  3. 没有橡皮擦控件。但这真的不是问题,因为我们可以为这幅画选择白色,给人一种橡皮擦的错觉。但是,如果有更好的实现,我很想知道。

问题:

是否有解决这些问题并提供简单但高效的绘图应用程序的解决方案?

注意:我也需要撤消/重做功能。

【问题讨论】:

  • 您是否为您的第 1 点找到了解决方案?
  • 我设法提高了性能,但要付出一些额外的代价。每次添加新路径时,我都不会重绘。相反,我在之前绘制的图像的已捕获图像上绘制。

标签: ios performance drawing quartz-graphics drawrect


【解决方案1】:

让我试着一一回答你的问题。

使用铅笔工具绘图不流畅。原因:它使用 addLineToPoint: 而不是(可能是)addQuadCurveToPoint:。

你说的是真的。IOS 设备在定义的时间间隔内寻找触摸。如果你快速移动你的手,你很可能最终会失去几个接触点。因此,使用线连接点会导致丑陋的尖峰。

我们可以通过curve fitting 算法来平滑曲线。但是,在绘图中进行一些调整可以显着提高质量。 Here 就是一个例子。

橡皮擦控制

如果您知道背景颜色,则可以将其用作画笔颜色以产生橡皮擦的感觉。如果你不知道背景,你可以使用

CGContextSetBlendMode(context, kCGBlendModeClear);

撤消/重做

你可以使用NSUndoManager

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多