在 ViewController 中导航时声音停止
Sound stops when navigating through ViewControllers
我目前正尝试在 Xcode 中制作一个用作音乐应用程序的应用程序。它目前有 2 ViewControllers,看起来像这样。 ViewControllers
音乐代码ViewController:
import UIKit
import AVFoundation
class MusicViewController: UITableViewController, UINavigationControllerDelegate {
let songs = ["Sugar", "Da-i Foale", "Kush"]
var player = AVAudioPlayer()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
override func viewWillAppear(_ animated: Bool) {
navigationController?.navigationBar.isHidden = false
}
//MARK: - Data Delegate Methods
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return songs.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "SongCell", for: indexPath)
cell.textLabel?.text = songs[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let path = Bundle.main.path(forResource: songs[indexPath.row], ofType: "mp3")!
let url = URL(fileURLWithPath: path)
do {
player = try AVAudioPlayer(contentsOf: url)
try AVAudioSession.sharedInstance().setCategory(.playback)
player.play()
} catch {
print(error)
}
}
}
我的想法是在没有音乐停止的情况下浏览其他 ViewController,但它不起作用。我不得不说目前我不使用 prepareForSegue()
或其他类似的方法。这是因为 ViewController 在您通过导航栏的后退按钮将其关闭后被销毁了?感谢您的关注,期待您的解答。
可能是您的播放器实例在 ViewController 进入后台时被释放。
您应该将 AVAudioPlayer 实例放到 AppDelegate 中。
我目前正尝试在 Xcode 中制作一个用作音乐应用程序的应用程序。它目前有 2 ViewControllers,看起来像这样。 ViewControllers 音乐代码ViewController:
import UIKit
import AVFoundation
class MusicViewController: UITableViewController, UINavigationControllerDelegate {
let songs = ["Sugar", "Da-i Foale", "Kush"]
var player = AVAudioPlayer()
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
override func viewWillAppear(_ animated: Bool) {
navigationController?.navigationBar.isHidden = false
}
//MARK: - Data Delegate Methods
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return songs.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "SongCell", for: indexPath)
cell.textLabel?.text = songs[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let path = Bundle.main.path(forResource: songs[indexPath.row], ofType: "mp3")!
let url = URL(fileURLWithPath: path)
do {
player = try AVAudioPlayer(contentsOf: url)
try AVAudioSession.sharedInstance().setCategory(.playback)
player.play()
} catch {
print(error)
}
}
}
我的想法是在没有音乐停止的情况下浏览其他 ViewController,但它不起作用。我不得不说目前我不使用 prepareForSegue()
或其他类似的方法。这是因为 ViewController 在您通过导航栏的后退按钮将其关闭后被销毁了?感谢您的关注,期待您的解答。
可能是您的播放器实例在 ViewController 进入后台时被释放。
您应该将 AVAudioPlayer 实例放到 AppDelegate 中。