Возможно, немного поздно отвечать на этот вопрос, но, поскольку я наткнулся на это в поиске Google, возможно, это поможет кому-то еще.
Я столкнулся с таким поведением с помощью AVPlayer и обнаружил, что причина в наблюдателе времени, который продолжал работать во время очистки. Наблюдатель за временем отвечал за обновление положения скруббера в зависимости от текущего времени воспроизведения. Таким образом, как только жест заканчивал перемещение ползунка, наблюдатель времени перемещал ручку ползунка обратно туда, где, по его мнению, было воспроизведение до того, как действие очистки обновляло часы воспроизведения.
Мое решение состояло в том, чтобы временно удалить на этот раз наблюдателя сразу после начала очистки и воссоздать его после окончания очистки.
Когда начинается очистка:
if (scrubberTimeObserver) {
[player removeTimeObserver:scrubberTimeObserver];
scrubberTimeObserver = nil;
}
Обратите внимание, что вам нужно знать имя вашего наблюдателя времени, чтобы убедиться, что вы удаляете правильный.
По окончании очистки:
scrubberTimeObserver = [player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(interval, NSEC_PER_SEC)
queue:dispatch_get_main_queue()
usingBlock:^(CMTime time) {
[weakSelf syncScrubber];
}
];
person
timgcarlson
schedule
24.10.2013