【问题标题】:When I tap the "next" button it pauses the music instead of automatically going to the next song当我点击“下一首”按钮时,它会暂停音乐而不是自动转到下一首歌曲
【发布时间】:2021-02-15 07:30:24
【问题描述】:

您好,我最近使用 MPMusicPlayerController 实现了一个播放/暂停按钮,我现在添加了一个“下一首歌曲”按钮。但是当我点击“下一首歌曲”按钮时,它会暂停音乐,当我点击“播放”按钮时,它会播放下一首歌曲。我想知道是否有一种方法可以在我单击“下一首歌曲”按钮时自动播放下一首歌曲而不是暂停它。这是我的 2 个按钮的代码:

var musicPlayer = MPMusicPlayerController.systemMusicPlayer

@IBAction func nextMusicTapped(_ sender: UIButton) {
    musicPlayer.skipToNextItem()
    musicPlayer.prepareToPlay()
    musicPlayer.play()
    
}


@IBAction func playPauseMusicTapped(_ sender: UIButton) {
    let state = musicPlayer.playbackState.rawValue
    if (state == 1) { //playing
        musicPlayer.pause()
        musicPlayPauseButton.setImage(UIImage(systemName: "play.fill"), for: .normal)
        musicNextButton.isHidden = true
    } else if (state == 2) { //paused
        musicPlayer.prepareToPlay()
        musicPlayer.play()
        musicPlayPauseButton.setImage(UIImage(systemName: "pause.fill"), for: .normal)
        musicNextButton.isHidden = false
    }
}

【问题讨论】:

    标签: ios swift xcode


    【解决方案1】:

    首先,根据 Apple 的文档,skipToNextItem() 执行以下操作:

    开始播放播放队列中的下一个媒体项;或者,如果音乐播放器未在播放,则将下一个媒体项指定为下一个要播放的媒体项。

    换句话说,如果音乐播放器已经在播放歌曲,您不必告诉它播放下一个项目,它应该会自动开始播放。所以你不需要以下几行:

    musicPlayer.prepareToPlay()
    musicPlayer.play()
    

    这也让我相信,在调用 skipToNextItem() 之前,您的音乐播放器会以某种方式暂停。尝试将print(musicPlayer.playbackState.rawValue) 放在第4 行之前。如果它打印2,那么您的音乐播放器似乎通过单击“下一首歌曲”按钮暂停,这意味着您的IBAction 连接发生了一些奇怪的事情。我之前做过这个,我不小心用同一个按钮调用了两个不同的 IBAction 方法(由于首先设置插座时出错)。在您的特定情况下,您可能会不小心调用playPauseMusicTapped(暂停音乐)和nextMusicTapped() 方法来切换歌曲,但这只是一个随机的想法。无论如何,让我知道第 4 行之前的播放状态是什么。很高兴知道这一点。

    【讨论】:

    • 您好,非常感谢,当我复制并粘贴播放暂停按钮以制作下一首歌曲按钮以取消下一首歌曲按钮与 playpausemusictapped ibaction 的链接时,我忘记了。
    • 是的,可以的。很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多