Как я могу получить доступ к ViewController из MPNowPlayingInfoCenter - PullRequest
0 голосов
/ 01 августа 2020

Я работаю над аудиоплеером и столкнулся с такой ситуацией: у меня есть TrackDetailView, который открывается для воспроизведения трека, когда я нажимаю на ячейку TableView. Также я реализовал фоновое воспроизведение и MPNowPlayingInfoCenter. Когда я нажимаю кнопку «Пауза» или «Воспроизведение» в MPNowPlayingInfoCenter, я хочу, чтобы изображение кнопки изменилось и в моем TrackDetailView, но я просто не могу этого сделать. Буду рад любой помощи. Важное примечание (!) TrackDetailView и MPNowPlayingInfoCenter находятся в разных классах. Когда ставлю их в один класс, все работает без проблем. Мой код:

class TrackDetailView: UIView {
   var audioPlayer = AudioPlayer()
   ...
   @IBOutlet var playPauseButton: UIButton!
   ...
   //Loading with view
   func set() {
   setupMediaPlayerNotificationView()
   }
}

class AudioPlayer {
var trackDetailView: TrackDetailView?
func setupMediaPlayerNotificationView() {
        let commandCenter = MPRemoteCommandCenter.shared()
        
        commandCenter.playCommand.addTarget { [unowned self] event in
            if self.player.rate == 0.0 {
                self.player.play()
                self.trackDetailView?.playPauseButton.setImage(#imageLiteral(resourceName: "pause"), for: .normal)
            }
            return .commandFailed
        }
        
        commandCenter.pauseCommand.addTarget { [unowned self] event in
            if self.player.rate == 1.0 {
                self.player.pause()
                self.trackDetailView?.playPauseButton.setImage(#imageLiteral(resourceName: "play"), for: .normal)
                return .success
            }
            return .commandFailed
        }
       ...
    }
}

Думаю, у меня проблема с экземпляром класса TrackDetailView.

1 Ответ

1 голос
/ 01 августа 2020

Вам необходимо убедиться, что для этого экземпляра

var audioPlayer = AudioPlayer()

вы указали

audioPlayer.trackDetailView = self

ex здесь

func set() {
  audioPlayer.trackDetailView = self
  audioPlayer.setupMediaPlayerNotificationView()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...