Как синхронизировать анимацию со звуком на iPad - PullRequest
2 голосов
/ 29 октября 2010

У меня есть страница на iPad, которая настроена так, что есть куча персонажей и фоновой музыки.Нажатие на персонажа запустит анимацию, и персонаж будет играть вместе с музыкой.Проблема в том, что музыка и анимация синхронизируются, и, возможно, есть лучший способ.

Вот как я это делаю.
• загрузка страницы
• Я добавляю неподвижные версиисимволов в виде UIImageViews • Я создаю объекты AVAudioPlayer для каждого из инструментов персонажа, запускаю их воспроизведение и устанавливаю громкость на 0.
• Я добавляю анимированные версии символов в виде UIImageViews с последовательностью png, положение над неподвижными версиямии скрыть их.(есть кнопки, которые включают переключатели видимости и громкости)

Когда я демонстрирую это, звук начинает воспроизводиться до загрузки страницы, и некоторые символы действительно не синхронизируются.Что я должен делать по-другому?Как я могу синхронизировать это?Это абсолютно неправильный подход?Я новичок в этом.

Ответы [ 2 ]

1 голос
/ 29 октября 2010

Я не уверен, что это решит вашу конкретную проблему (поскольку я не до конца понимаю, что вы пытаетесь сделать), но, как правило, вы должны создать свой набор AVAudioPlayer объектов и затем вызвать [myPlayer prepareToPlay]на каждом из них.Этот вызов загружает данные в буферы, готовые к воспроизведению, но фактически не запускает их.Затем, когда вы будете готовы запустить все игры (в viewDidLoad или где-либо еще), одновременно вызовите [player play] для них.

Обратите внимание, что это, вероятно, будет работать только лучше, чем у васв настоящее время, но это все еще не будет работать идеально.Поддержание идеальной синхронизации анимации и музыки чрезвычайно сложно, и, как правило, это может быть достигнуто только с помощью таймера, который периодически сбрасывает свою периодичность в ответ на информацию от механизма воспроизведения звука о том, где именно воспроизведение звука в настоящее время находится.

0 голосов
/ 20 февраля 2017

Я знаю, что квест старый, но использование CAKeyframeAnimation может помочь.

...