【问题标题】:Is drawrect more efficient for coregraphcs drawing than using core graphics in touches moved?对于 coregraphcs 绘图,drawrect 是否比在移动触摸中使用核心图形更有效?
【发布时间】:2011-10-01 15:43:54
【问题描述】:

我的整个应用程序使用touchesMoved 进行绘图(Coregraphics)。我应该从touchesMoved 中调用[self setNeedsDisplay] 而不是在那里执行绘图代码吗?这会阻止我正在经历的一些滞后吗?我在发布之前没有尝试这个的唯一原因是因为我需要几个小时才能将所有绘图转换到drawRect 内,我想知道它是否比在touchesMoved 内绘图更有效?

【问题讨论】:

    标签: iphone cocoa-touch uikit drawrect touches


    【解决方案1】:

    是的。您应该始终将绘图保留在 drawRect 中并使用 setNeedsDisplay 来触发实际绘图。这是在 Cocoa Touch 中渲染视图的关键。

    例如,如果您不使用此方法,您可能会在多个方法中将绘图代码分散在您的类中。此外,这还可以确保您的绘图代码在渲染周期内只执行一次。本质上,调用 setNeedsDisplay 会触发一个失效标志,让您的 UIView 知道自己重绘。如果没有这个,您可能会执行由于渲染周期而实际上不需要的额外绘图操作。

    【讨论】:

      【解决方案2】:

      您不应该在 UI 回调中进行绘图。它会减慢或冻结 UI 响应,如果您想直接绘制到 UIView 中,您将没有正确的绘图上下文。

      而是将绘制所需的信息保存、调度或排队以供以后使用,或者在您自己的位图绘制上下文中,或者在该视图的 drawRect 回调期间。

      根据所需的帧速率,您甚至不需要在每个 touchesMoved 事件上执行 setNeedsDisplay,但可以将数据排队并为动画速率计时器或 CADisplayLink 回调设置标志以更恒定的速率执行 setNeedsDisplay (比如说每秒只有 15 或 30 帧)。这也将有助于消除额外的绘图操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 2013-02-18
        • 1970-01-01
        相关资源
        最近更新 更多