我有一些动画需要在非常特定的时间出现在屏幕上,这些都存储在 SQLite 数据库中。我打算做的是使用 nstimer 来保持时间并在达到特定时间时弹出动画。
我正在考虑使用 NSTimer 来计算声音文件和动画的持续时间,然后在达到某些点时弹出屏幕动画。问题是设置的时间是这样的 55.715000 秒,所以非常准确,这些需要与将与动画一起播放的音轨同步。
首先,这是否可能,其次,我如何比较这些特定的时间,我似乎面临的问题是代码运行速度不够快,时间跳跃超过 0.001 秒。
我不了解 openGLES 或 Cocos2d,学习这些在时间尺度上不太可行。
最佳答案
如果您的视觉效果需要与音频完全同步(例如,动画必须出现在节拍上的音乐应用),那么您需要使用以下方法。它适用于非常老旧的 iPhone 硬件,运行时基本上不会出错。
预渲染视觉效果的每个“帧”,以便将每个“帧”存储为全屏图像。这可以在桌面上完成,或者您可以在手机上运行渲染逻辑,然后将输出以像素形式捕获到文件中。
将每个帧保存为像素数组后,通过 iOS 上的标准 AVAudioPlayer API 播放音频。此 API 负责音频播放并报告您将用于确定显示哪个视频帧的时间。
播放音频后,获取“时间”并将其除以您的视频帧率,以确定要显示 N 个图像数组中的哪一个图像。获取图像数据并将其包装在 CGImageRef/UIImage 中,这将以最佳方式将图像数据 blit 到屏幕。
如果您想查看此方法的工作源代码,请查看 AVSync .此示例代码显示了我在应用商店中名为 iPractice 的应用中使用的实现。它非常快,即使在旧的 iPhone 3G 上也能以 30FPS 的速度运行。
关于objective-c - 带有声音文件的动画 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765341/