首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换视图控制器时的连续音乐播放. Swift 4.2

切换视图控制器时的连续音乐播放. Swift 4.2
EN

Stack Overflow用户
提问于 2019-02-26 21:22:48
回答 1查看 243关注 0票数 2

我正在尝试将背景音乐实现到我用Xcode制作的应用程序中,在我使用的Swift的当前版本(4.2)中,我很难找到一个有效的解决方案。当前,当我从一个视图控制器切换到另一个视图控制器时,音乐将重新启动,但当我退出视图控制器时,这不会发生。

我将发布我目前正在编写的代码:

ViewController.swift

代码语言:javascript
复制
import UIKit
import AVFoundation

class ViewController: UIViewController {

var audioPlayer : AVAudioPlayer?
var selectedSoundFileName : String = ""
let phonicSoundArray = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "ai", "ar", "ch", "ck", "ee", "ie", "ng", "oa", "oi", "oo", "or", "ou", "ph", "qu", "sh", "ss", "th", "ue"]

override func viewDidLoad() {
    super.viewDidLoad()
    MusicHelper.sharedHelper.playBackgroundMusic()
}


@IBAction func dismissCurrentView(_ sender: Any) {
    self.dismiss(animated: true, completion: nil)
}

//== Phonic audio playback =================
@IBAction func phonicPracticeButtonPressed(_ sender: AnyObject) {

    selectedSoundFileName = phonicSoundArray[sender.tag - 1]+".mp3"

    let path = Bundle.main.path(forResource: selectedSoundFileName, ofType:nil)!
    let url = URL(fileURLWithPath: path)

    do {
        audioPlayer = try AVAudioPlayer(contentsOf: url)
        audioPlayer?.play()
    } catch {
        print("Couldn't load audio")
    }
}
}

BGMSingleton.swift

代码语言:javascript
复制
import Foundation
import AVFoundation

class MusicHelper {
static let sharedHelper = MusicHelper()
var audioPlayer: AVAudioPlayer?

func playBackgroundMusic() {
    let aSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "BGM", ofType: "mp3")!)
    do {
        audioPlayer = try AVAudioPlayer(contentsOf:aSound as URL)
        audioPlayer!.numberOfLoops = -1
        audioPlayer!.prepareToPlay()
        audioPlayer!.play()
    }
    catch {
        print("Cannot play the file")
    }
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 22:15:43

假设你在你发布的两个相同的风投之间.

每当你在VC中加入MusicHelper.sharedHelper.playBackgroundMusic()时,你的音乐就会重新启动。

viewDidLoad在VC生命周期中只发生一次。当你解雇一个VC时,你不会调用它的viewDidLoad,这就是为什么音乐没有重新启动的原因。

关于VC生命周期的更多信息

https://developer.apple.com/documentation/uikit/uiviewcontroller

Looking to understand the iOS UIViewController lifecycle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54894318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档