通过更改CGPoint进行动画制作

时间:2012-06-16 04:21:23

标签: ios animation core-animation

在我的iOS应用程序中,我根据给定点(由CGPoint指定)进行大量三角计算,然后根据这些计算创建一些转换矩阵,最终用于OpenGL绘图(通过{ {1}})。我想通过随着时间的推移改变基本GLKit来创建一个动画,但我不确定我应该用什么方法来制作动画。

我真正想要的是一个API,它允许我指定在每次迭代时调用的函数,就像CGPoint一样,但是如果我能够轻松地利用它,它会非常酷/ out等。每次迭代需要修改的唯一数据是我的主NSTimer,其余的渲染可以从中确定。

我考虑过的方法,但放弃了:

  1. 核心动画:我正在使用OpenGL绘制,因此Core Animation似乎没有帮助。

  2. CGPoint:这并没有给我贝塞尔曲线的灵活性,看起来非常手动。

  3. 基于给定帧率的心跳:我只需要在点变化时重新渲染,并且大部分时间它都是静止的。不觉得心跳是正确的方法。

  4. 有什么东西像我描述的那样存在吗?我必须自己写吗?或者我只是误解了为我提供的工具,这表明我应该再看看我是如何绘制我的图形的?

2 个答案:

答案 0 :(得分:2)

您可以使用GLKViewGLKViewController进行渲染,并使用update:的{​​{1}}方法更改点。

答案 1 :(得分:2)

我同意另一张海报。假设你可以使用iOS 5,你应该使用GLKView和GLKViewController。设置为每次屏幕刷新时调用一次(在内部使用CADisplayLink。)如果您不想只是iOS 5,可以自己设置CADisplayLink。

核心动画对OpenGL渲染无用。但是,您可以使用Core Animation的设计来驱动您的设计。核心动画(与Cocoa的其余部分一样)构建在OpenGL之上,因此您可以自己完成CA所做的一切。它只需要工作。 (有时很多工作。)

核心动画使用基于动画而非基于帧的动画模型。每次渲染场景时,它都会根据自动画开始以来经过的时间决定应该应用多少运动。如果它在渲染帧时落后,则下一帧会进一步移动,因此随时间的运动是一致的。

就缓和/缓和时间而言,你也可以自己做。你需要阅读动画时间。它使用输入时间与输出时间的非线性映射,使用贝塞尔曲线在开始和结束时更改曲线的形状。