objective-c - 带有声音文件的动画 iOS

标签 objective-c ios animation uiviewcontroller

我有一些动画需要在非常特定的时间出现在屏幕上,这些都存储在 SQLite 数据库中。我打算做的是使用 nstimer 来保持时间并在达到特定时间时弹出动画。

我正在考虑使用 NSTimer 来计算声音文件和动画的持续时间,然后在达到某些点时弹出屏幕动画。问题是设置的时间是这样的 55.715000 秒,所以非常准确,这些需要与将与动画一起播放的音轨同步。

首先,这是否可能,其次,我如何比较这些特定的时间,我似乎面临的问题是代码运行速度不够快,时间跳跃超过 0.001 秒。

我不了解 openGLES 或 Cocos2d,学习这些在时间尺度上不太可行。

最佳答案

如果您的视觉效果需要与音频完全同步(例如,动画必须出现在节拍上的音乐应用),那么您需要使用以下方法。它适用于非常老旧的 iPhone 硬件,运行时基本上不会出错。

  1. 预渲染视觉效果的每个“帧”,以便将每个“帧”存储为全屏图像。这可以在桌面上完成,或者您可以在手机上运行渲染逻辑,然后将输出以像素形式捕获到文件中。

  2. 将每个帧保存为像素数组后,通过 iOS 上的标准 AVAudioPlayer API 播放音频。此 API 负责音频播放并报告您将用于确定显示哪个视频帧的时间。

  3. 播放音频后,获取“时间”并将其除以您的视频帧率,以确定要显示 N 个图像数组中的哪一个图像。获取图像数据并将其包装在 CGImageRef/UIImage 中,这将以最佳方式将图像数据 blit 到屏幕。

如果您想查看此方法的工作源代码,请查看 AVSync .此示例代码显示了我在应用商店中名为 iPractice 的应用中使用的实现。它非常快,即使在旧的 iPhone 3G 上也能以 30FPS 的速度运行。

关于objective-c - 带有声音文件的动画 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765341/

相关文章:

ios - 检查图像是否全白的最佳性能方法?

objective-c - 单例设计

iphone - 使用 tesseract 扫描图像时是否可以获得 x,y 坐标?

ios - Xcode5:无法注册“/System/Library/CoreServices/CoreTypes.bundle/Contents/Library/MobileDevices.bundle

具有流畅三列布局的 css 图像悬停动画

objective-c - 操作系统 : Enumerate screens while on Login Window

ios - 如何在 iOS 中触发 uilocalnotification 时(而不是在单击时)?

ios - 圆弧错误 : init methods must return a type related to the receiver type [4]

ios - (Cocos2D) Sprite 没有完美地位于其他 sprite 之上?

java - NetBeans GUI 生成器 : Add gifs to label