优化核心图形动画(iPhone)

时间:2010-07-22 16:05:50

标签: iphone objective-c animation core-graphics cglayer

我有一个循环,每秒触发一次30次函数。该函数改变了我用于动画的几个点的位置。我在所有点上绘制线条,这意味着线条每秒会改变30次。

我将这些线条绘制到CGLayer,然后绘制到drawRect:方法中的UIView。我之所以这样做,是因为我了解在离线绘图时性能得到了提升。但是,CGLayer似乎保存了所有实际行而不是绘制的像素,因为即使我清除了它,当绘制更多行时,程序也会越来越慢。

我正在寻找其他动画方法。什么是最有效的方式和原因?

2 个答案:

答案 0 :(得分:4)

您应该使用Core Animation框架为图层上的属性设置动画。您既可以将CALayer子类化,也可以使用委托来进行实际绘制。在绘图代码中,您可以访问正在插值的属性,并使用它来移动点,更改线条的粗细或Core Graphics允许您控制的任何其他内容。查看this example code from Apple,看看它如何使用正在设置动画的lineWidth值。

This little tutorial by John Blackburn是我最喜欢的核心动画介绍之一。需要掌握一些不同的概念,但一般来说创建相当复杂的动画非常简单。

运行速度越来越慢的问题很可能与Core Graphics无关。可能是你不小心创造了越来越多的计时器。

答案 1 :(得分:4)

如果您的路径需要从州到州动画,我强烈建议您查看CAShapeLayer。此图层类型允许您指定两个路径(具有相同数量的控制点),并使用Core Animation在它们之间平滑地设置动画。

关于这个问题的两篇好文章是Matt Long的"Marching Ants With Core Animation"和Joe Ricioppo的"Complex Interpolation with CAShapeLayer (Free)"

如果您的图像部分保持不变,并且您只需要在其上复合新元素,我建议将图像的一部分绘制到静态CALayers或UIViews中,然后在顶部添加新视图对于那些改变的部分。合并图层比重绘视图或图层的内容要快得多。

相关问题