我有一个每秒触发函数 30 次的循环。该函数更改了我用来制作动画的几个点的位置。我在所有点上画线,这意味着这些线每秒会变化 30 次。
我将这些线绘制到 CGLayer,然后在 drawRect: 方法中将其绘制到 UIView。我这样做是因为我知道在屏幕外绘制时性能会提高。但是,CGLayer 似乎保存了所有实际线条而不是绘制的像素,因为即使我清除它,当绘制更多线条时,程序运行速度也会随着时间的推移而越来越慢。
我正在寻求其他方法来制作动画。什么是最有效的方法,为什么?
最佳答案
您应该使用 Core Animation 框架来为层上的属性设置动画。您可以子类化 CALayer
或使用委托(delegate)来进行实际绘图。在绘图代码中,您可以访问正在插值的属性并使用它来移动点、更改线的粗细或 Core Graphics 允许您控制的任何其他内容。看this example code from Apple并查看它如何使用正在设置动画的 lineWidth
值。
This little tutorial by John Blackburn是我最喜欢的 Core Animation 介绍之一。有几个不同的概念需要掌握,但通常创建非常复杂的动画非常简单。
您遇到的运行速度越来越慢的问题很可能与 Core Graphics 无关。例如,可能是您不小心创建了越来越多的计时器。
关于iphone - 优化 Core Graphics 动画绘图 (iPhone),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3310883/