【问题标题】:which algorithm should i use to change/modify the curves我应该使用哪种算法来更改/修改曲线
【发布时间】:2011-12-31 12:29:58
【问题描述】:

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

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

【问题讨论】:

    标签: iphone quartz-2d cgpath


    【解决方案1】:

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

    【讨论】:

    • 我明白了。你有教程或示例代码的链接吗?会更有帮助。
    • 你可以看看nachbaur.com/blog/core-animation-part-4和谷歌一下。
    • 我使用 CAShapeLayer 实现。修改时我无法删除旧路径。另一个问题是我无法从 UIView 中获取 CAShapeLayer。就像一旦你绘制并穿上 UIView 你就不能改变它的内容。相反,您必须创建一个新的 CAShapeLayer。有什么想法吗?
    • 只保留对CAShapeLayer 的引用,并在修改完路径后设置其path 属性。
    【解决方案2】:

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

    很容易花时间在不需要的优化上。最初最好把时间和想法花在创建“干净”的代码上。

    【讨论】:

    • 我正在寻找另一种不太麻烦的算法。我需要关于 CGPath 的内置属性的想法,我不知道这些想法对我实现我的功能很有用。
    • 对于您的问题,很难解决这个问题,不知道您希望做出什么样的改变或多少分(10 或 10000)。我正在绘制一条超过 100 个点的曲线,通过跟踪手指移动进行更新,并且没有感知到重绘时间问题。
    • 主要问题是我画了不止一条曲线,然后我加入了它们。我想改变特定的曲线而不影响其他人。为此,我可以做的一件事是重绘所有曲线。当你重画曲线时你到底在做什么?
    • 您是否考虑过绘制多个路径段,然后将它们与- (void)appendPath:(UIBezierPath *)bezierPath 连接起来?然后您可以更改其中一个路径段并重新加入它们。
    • 我没有使用过 -(void)appendPath:(UIBezierPath*)bezierPath 但是如果使用这个我可以更改单个路径而不是它会有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    相关资源
    最近更新 更多