【问题标题】:Play music if not playing, but don't if it is already playing (Xcode,Swift4)如果未播放音乐,则播放音乐,但如果它已经在播放,则不要播放(Xcode,Swift 4)
【发布时间】:2018-11-21 12:44:36
【问题描述】:

我有一个关于AVFoundationAVAudioPlayer 的问题。

在我的项目中,我有一个视图,你从哪里开始,第二个视图是动作发生在哪里。当我启动应用程序时,我告诉第一个视图开始播放我的背景音乐,并且当用户在第二个视图中时它必须继续。但是每当您回到第一个视图时,它会再次开始播放歌曲,即使它已经在播放。所以我最终得到了很多回声。 我怎样才能防止这种情况发生?

这是我的代码:

import UIKit
import AVFoundation

class StartViewController: UIViewController {
    var backgroundPlayer = AVAudioPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()

        //background music file
        let sound = Bundle.main.path(forResource: "background_music", ofType: "mp3")

        do {
            backgroundPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: sound!))
        }
        catch {
            print(error)
        }

        playBackgorundMusic()
    }

    func playBackgorundMusic() {
        if backgroundPlayer.isPlaying {
            //do nothing
        } else {
            backgroundPlayer.play()
        }
    }
}

【问题讨论】:

  • 如果你想暂停你的播放多个ViewController然后在AppDelegate中实现播放暂停代码,这样你就可以轻松地播放暂停播放器。
  • 如何在两个视图控制器之间切换?因为如果您在第一个视图控制器上按下并关闭第二个视图控制器,这应该已经正常工作了。

标签: ios swift4 xcode10


【解决方案1】:

您应该为音乐播放器创建一个单例类,以保持播放、暂停、停止等状态。

class MusicPlayerManager{

    static let shared = MusicPlayerManager()
    var backgroundPlayer = AVAudioPlayer()

    init(){}

    func playMusic(){
        if backgroundPlayer.isPlaying {
            //do nothing
        } else {
            backgroundPlayer.play()
        }
    }

}

【讨论】:

    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多