2010-07-22 58 views
3

我有一个循环每秒触发一次函数30次。该函数改变了我用于动画的几个点的位置。我通过所有的点画线,这意味着线将每秒改变30次。优化核心图形动画(iPhone)

我将这些行绘制到CGLayer,然后在drawRect:方法中绘制到UIView。我这样做是因为我明白,在画外屏时性能得到了改善。但是,CGLayer似乎保存了所有实际行而不是绘制像素,因为即使清除了它,随着时间的推移,程序运行速度也会越来越慢,因为绘制的线越多。

我要求其他方法来动画这个。什么是最有效的方式,为什么?

回答

4

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

This little tutorial by John Blackburn是我最喜爱的Core Animation介绍之一。有几个不同的概念需要掌握,但通常创建相当复杂的动画非常简单。

对于运行速度较慢,速度较慢的事情,您的问题最有可能与Core Graphics无关。例如,你可能意外地创造了越来越多的计时器。

+0

谢谢!运行速度较慢的问题是我正在绘制一个不是位图的上下文,而是将所有行保存为实际行,这使得旧行不显示绘制。然而,绘制到位图上下文使其工作。 我会检查你发送的教程,谢谢! :) – Accatyyc 2010-07-22 20:19:56

4

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

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

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

+0

谢谢!有时间了解合成。 – Accatyyc 2010-07-22 20:20:32