在我的 iOS 应用程序中,我根据给定点(由 CGPoint 指定)进行大量三角计算,然后根据这些计算创建一些转换矩阵,最终用于 OpenGL 绘图(通过 GLKit )。我想通过随着时间的推移更改基本 CGPoint 来创建动画,但我不确定我应该为动画使用什么方法。
我真正在寻找的是一个 API,它允许我指定在每次迭代时调用的函数,就像 NSTimer 所做的那样,但如果我能接受它会非常酷优势缓入/缓出等。每次迭代需要修改的唯一数据是我的主CGPoint ,其余的渲染可以从中确定。
我考虑过但放弃的方法:
Core Animation:我使用 OpenGL 来绘制,所以 Core Animation 似乎没有帮助。
NSTimer :这并没有给我贝塞尔曲线的灵 active ,而且看起来很手动。
基于给定帧率的心跳:我只需要在点变化时重新渲染,而且大部分时间它是静止的。感觉心跳不是正确的方法。
是否存在如我所描述的那样?我必须自己写吗?还是我只是误解了为我提供的工具,这表明我应该再看看我是如何绘制图形的?
Best Answer-推荐答案 strong>
我同意另一张海报。假设你可以使用 iOS 5,你应该使用 GLKView 和 GLKViewController。设置为每次屏幕刷新调用一次(在内部使用 CADisplayLink。)如果您不想只使用 iOS 5,则可以自己设置 CADisplayLink。
核心动画对于 OpenGL 渲染没有用处。但是,您可以使用 Core Animation 的设计来驱动您的设计。核心动画(就像 Cocoa 的其余部分一样)构建在 OpenGL 之上,因此您可以自己完成 CA 所做的一切。它只需要工作。 (有时工作量很大。)
Core Animation 使用基于运动的动画模型,而不是基于帧的动画模型。每次渲染场景时,它都会根据动画开始后耗时来决定应该应用多少运动。如果它在渲染帧中落后,则下一帧会移动得更远,因此随着时间的推移运动是一致的。
就缓入/缓出时间而言,您也可以自己做。您需要阅读动画时间。它使用输入时间到输出时间的非线性映射,使用贝塞尔曲线在开始和结束时改变曲线的形状。
关于ios - 通过更改 CGPoint 设置动画,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/11060796/
|