Используя MPMusicPlayerController, установка musicPlayer.currentPlaybackTime для поиска, но занимает секунду, чтобы вступить в силу - PullRequest
4 голосов
/ 04 марта 2010

У меня есть UISlider, действующий как скруббер. Когда большой палец перетащен, я выполняю следующее:

- (void) _seekTo:(double)playbackTime {
     mPlayer.currentPlaybackTime = playbackTime;
}

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

У кого-нибудь есть опыт с этим поведением и способ исправления? Я могу предоставить пример проекта, если вы хотите, чтобы это продемонстрировало эту аномалию.

1 Ответ

1 голос
/ 04 марта 2010

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

Не могли бы вы просто отфильтровать промежуточные данные вручную? Вы знаете, сколько вы перепрыгнули, используя ползунок, поэтому, возможно, вы могли бы сохранить новую позицию в переменной и игнорировать обновления от игрока, пока они не окажутся удобно близко к новой позиции ползунка. (Надеюсь, что это имеет смысл.)

...