1

我有一个问题,我希望社区中的某个人可能有一些专业知识。我正在开发一个绘图应用程序。它的作用和原因太多了,但在每次 touchesMoved:withEvent 时,都必须重新计算近似贝塞尔曲线的过程,然后重新绘制。近似算法是这样的,在任何给定时刻,三次曲线都可以变成二次曲线并返回。因此,整条曲线的边界框可以点对点发生相当剧烈的变化。天真的方法是简单地获取贝塞尔曲线的边界并将其传递给 setNeedsDisplayInRect:,这显然比简单地调用 setNeedsDisplay 好得多,但是当我分析代码时,当然,在 drawRect 中花费了大量时间. 这带来了问题,但我希望减少它。

现在,如果 UIBezierPath 内部的笔画调用有足够的开销,它可能会渲染没有意义,从而最小化需要重新绘制的矩形的体积。情况可能就是这样,简单地使用幼稚的方法成为最好的选择。这是可能性#1。然而,我希望尝试的是创建一种算法,以最小化完全覆盖贝塞尔路径的一组矩形的总体积。换句话说,不是调用 setNeedsDisplayInRect 一次,而是调用它几次。rects 的并集完全覆盖了 UIBezierPath。我希望我可以用 LaTex 或其他东西更正式地写出来,但我想减少我需要重绘的区域,并警告说整个贝塞尔路径是这些矩形联合的一部分。想想多米诺骨牌。

4

0 回答 0