我在游戏中使用CADisplayLink方法通过EAGLView每秒绘制60次帧。

当我调用UIView animateWithDuration:时,在动画持续时间内,帧速率会下降到恰好一半,从60到30 fps。动画结束后,fps会立即回升至60。

我还尝试使用NSTimer动画方法代替CADisplayLink,但仍然得到相同的结果。

当扬声器图标逐渐消失时按音量按钮时,会发生相同的行为,因此它可能正在使用animateWithDuration。因为我希望能够在我的应用程序中平稳地处理扬声器图标,所以这意味着我不能只重写动画代码以使用animateWithDuration以外的其他方法,而需要找到一种适用于它的解决方案。

我知道有一个选项可以减慢动画的速度,以便在模拟器上进行调试,但是,我在设备上遇到了这种情况,因此未启用任何此类选项。我也尝试对animateWithDuration使用各种选项,例如线性选项和用户交互,但没有一个改进。

我也知道我可以设计一种引擎,该引擎仍可以在变化很大的帧速率下工作。但是,这不是解决此问题的理想解决方案,因为游戏需要高fps。

有人曾经看过或解决过这个问题吗?

最佳答案

解决方案是在CADisplayLink回调过程中制作自己的动画并变白。

1)对于音量问题,请在角落放置一个小的音量图标,或者在用户执行一些预定义的触摸操作时显示该图标,并为其提供触摸控件。使用该输入,您可以使用AVAudioPlayer改变音量,而完全避免系统控制。您甚至可以确定用户是否按下了音量按钮,然后弹出一些便条纸以自己的方式进行操作。这使您远离系统发生的任何动画。

2)当您有想要制作的动画时,好吧,用代码创建一系列图像(然后或之前),然后displayLink中的许多回调将图像显示在屏幕上。

关于objective-c - UIView animateWithDuration : slows down animation frame rate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11773803/

10-10 03:25