2011-12-31 33 views
0

我已经制作了一个应用程序,它使用UIBezierPath绘制大量曲线。现在我试图在其中实现修改功能。为了修改特定曲线,我可以做的一件事是再次绘制所有的曲线;我还没有实现这一点。但我认为这种算法在曲线数量增加时效率不高,因为我必须将所有点存储在数组中,并且每次修改时都必须运行for循环来绘制每条曲线。我应该使用哪种算法来更改/修改曲线

我在寻找更高效的算法。如果有人可以提供示例代码,这将会很有帮助。

回答

0

可以表示单独的曲线,UIBezierPath秒和通过创建每一个曲线和CAShapeLayer分配形状层的path属性到贝塞尔路径的相应的属性CGPath分别绘制它们。要更新单个曲线,您只需要操作一个贝塞尔路径和相应的形状图层path属性。

+0

我明白了。您有任何指向教程或示例代码的链接吗?这将会更有帮助。 – Harsh 2012-01-02 04:55:52

+0

你可能会看看http://nachbaur.com/blog/core-animation-part-4和Google。 – MrMage 2012-01-02 15:18:34

+0

我使用CAShapeLayer实现。虽然修改我不能删除旧的路径。 Anothe问题是我无法从UIView中抓取CAShapeLayer。这就像一旦你绘制并放在UIView上,你就不能改变它的内容。相反,你必须做一个新的CAShapeLayer.Any想法? – Harsh 2012-01-03 10:56:01

0

重新绘制曲线,直到出现仪器测量出的性能问题。如果再次出现这种情况,请使用仪器查明最佳优化方法。

很容易让人花时间在不需要的优化上。最初,将时间放在一边并考虑创建一个“干净的”代码会好得多。

+0

我正在寻找另一种不太麻烦的算法。我需要关于CGPath内置属性的想法,这些我都不知道,并且可能对我实现我的功能很有用。 – Harsh 2011-12-31 13:22:02

+0

随着你的问题很难提供帮助,不知道你期望做什么样的改变或有多少点(10或10000)。我正在绘制超过100分的曲线,通过跟踪手指移动进行更新,并且没有察觉到重绘时间问题。 – zaph 2011-12-31 13:30:11

+0

主要问题是我绘制了多条曲线,并且比我加入了它们。我想改变特定曲线而不影响其他曲线。要做到这一点,我可以做的一件事是重绘所有的曲线。当你重绘曲线时你到底做了什么? – Harsh 2011-12-31 13:35:59