【问题标题】:How can I get access to ViewController from MPNowPlayingInfoCenter如何从 MPNowPlayingInfoCenter 访问 ViewController
【发布时间】:2020-08-01 11:14:39
【问题描述】:

我正在开发音频播放器,遇到了这种情况: 我有一个 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 类的实例有疑问。

【问题讨论】:

  • var trackDetailView: TrackDetailView? 是如何设置的?
  • 你有什么想法?
  • 我在问你如何初始化变量。当您写 self.trackDetailView?.playPauseButton.setImage 时,您是在说如果它是 nil 就可以默默地什么都不做……这可能就是正在发生的事情。
  • @VyacheslavB 就像 Philip 说的那样,确保 trackDetailView 不是 nil 以使 trackDetailView? 有效和工作

标签: ios swift delegates viewcontroller mpnowplayinginfocenter


【解决方案1】:

您需要确保对于这个实例

var audioPlayer = AudioPlayer()

你设置

audioPlayer.trackDetailView = self

这里是 x

func set() {
  audioPlayer.trackDetailView = self
  audioPlayer.setupMediaPlayerNotificationView()
}

【讨论】:

  • 非常感谢!真的行!你能更详细地解释一下吗?为什么需要它?
  • 很快这个 var trackDetailView: TrackDetailView? 是 nil,直到你通过分配将它链接到现有的显示视图,否则在执行 trackDetailView?....... 时没有任何效果,所以 audioPlayer.trackDetailView = self 来救援
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
相关资源
最近更新 更多