【发布时间】:2011-12-31 12:29:58
【问题描述】:
我制作了一个使用 UIBezierPath 绘制多条曲线的应用程序。现在我正在尝试在其中实现修改功能。要修改特定曲线,我可以做的一件事是再次绘制所有曲线;我还没有实现这个。但是我认为当曲线数量增加时,这种算法效率不会很高,因为我必须将所有点存储在数组中,并且每次修改时都必须运行 for 循环来绘制每条曲线。
我正在寻找更有效的算法。如果有人可以提供示例代码,将会很有帮助。
【问题讨论】:
我制作了一个使用 UIBezierPath 绘制多条曲线的应用程序。现在我正在尝试在其中实现修改功能。要修改特定曲线,我可以做的一件事是再次绘制所有曲线;我还没有实现这个。但是我认为当曲线数量增加时,这种算法效率不会很高,因为我必须将所有点存储在数组中,并且每次修改时都必须运行 for 循环来绘制每条曲线。
我正在寻找更有效的算法。如果有人可以提供示例代码,将会很有帮助。
【问题讨论】:
您可以将单个曲线表示为UIBezierPaths,并通过为每条曲线创建一个CAShapeLayer 并将形状图层的path 属性分配给贝塞尔路径的相应CGPath 属性来分别绘制它们。要更新单个曲线,您只需操作一个贝塞尔路径和相应的形状层path 属性。
【讨论】:
CAShapeLayer 的引用,并在修改完路径后设置其path 属性。
重新绘制曲线,直到出现使用 Instruments 测量的性能问题。如果再次出现这种情况,请使用 Instruments 确定最佳优化方法。
很容易花时间在不需要的优化上。最初最好把时间和想法花在创建“干净”的代码上。
【讨论】:
- (void)appendPath:(UIBezierPath *)bezierPath 连接起来?然后您可以更改其中一个路径段并重新加入它们。