Универсальный аудиоплеер с элементами управления в нескольких контроллерах вида


Приложение Audioboo iOS имеет универсальный аудиоплеер с элементами управления (например, кнопка воспроизведения/паузы.) вид всегда виден на загруженных контроллерах вида при воспроизведении контента. Кроме того, иногда сами контроллеры вида также имеют элементы управления (кнопка воспроизведения / паузы и таймер обратного отсчета)

Мой вопрос заключается в том, как лучше всего узнать при загрузке представления, что проигрыватель воспроизводит соответствующее содержимое, и обновить состояние управления и таймер этого представления?

Проверьте эти ссылки на скриншоты http://cl.ly/image/2k213Q0L2U2w http://cl.ly/image/3o0F0a150d1T // Вид нижнего плеера всегда виден при перемещении между контроллерами вида.

Примечание: Это мой первый вопрос здесь, поэтому, пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы или вы хотите, чтобы я что-то прояснил:]

2 2

2 ответа:

В вашем классе, который управляет аудиоплеером, вы должны добавить public property, который будет указывать на текущую проигрываемую сущность. Например:

@interface MyAudioPlayer : AVPlayer
...
@property (nonatomic, strong) Song *currentSong
...
@end

И не забудьте назначить соответствующую песню этому свойству всякий раз, когда новая песня начинает играть.

Тогда вы сможете получить доступ к этой текущей песне с любого контроллера вида.

UPD:

После некоторых разъяснений я публикую обновление для дальнейшего использования. Для того, чтобы управлять перепиской между игроками часть данных и пользовательского интерфейса для нескольких UIViewControllers Существует 3 основных подхода:

1) Вы можете использовать NSNotification, отправленные классом player manager, когда появляется какое-либо событие (например, изменение песни и т. д.) и перехватывается вашими контроллерами вида.

2) Вы можете использовать KVO и подписывать контроллеры вида на изменения в классе плеера.

3) Возможно, вы захотите взглянуть наReactiveCocoa , который является заменой парадигмы кво.

Создайте пользовательскую панель вкладок, которая воспроизводит песню и имеет панель для отслеживания прогресса и так далее. Затем, когда вы измените представления, представление "текущая песня" не изменится и останется прежним. Вы также можете просто добавить пользовательский вид в верхней части экрана с помощью AppDelegate. Надеюсь, это поможет!