【发布时间】: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