我正在使用Swift构建一个简单的音频播放器应用程序。我的故事板中有两个视图控制器。第二个View Controller创建AVAudioPlayer的一个实例,用于播放音频。我希望用户能够远离该视图控制器,使用应用程序中的其他功能并返回到该视图控制器来操纵播放器。
问题在于,当我播放一些音频时,导航然后返回播放器View Controller并再次按下播放,同时播放两个版本的音频文件。
我猜它正在创建一个AVAudioPlayer对象的新实例,而不是操纵我先制作的那个。我认为这与Swift取消分配然后重新初始化播放器视图控制器有关吗?
以下是相关代码:
import UIKit
import AVFoundation
class ViewController: UIViewController {
var player: AVAudioPlayer = AVAudioPlayer()
let audioPath = NSBundle.mainBundle().pathForResource("daftPunk", ofType: "mp3")!
@IBOutlet var volumePosition: UISlider!
@IBOutlet var scrubPosition: UISlider!
@IBAction func play(sender: AnyObject) {
player.play()
}
答案 0 :(得分:0)
我相信最快的解决方案是创建一个包装AVAudioPlayer对象的单例类。
class AudioPlayer {
var player: AVAudioPlayer = AVAudioPlayer()
let audioPath = NSBundle.mainBundle().pathForResource("daftPunk", ofType: "mp3")!
static let sharedInstance = AudioPlayer()
init() { }
}
然后使用AudioPlayer.sharedInstance.player.play()。通过这种方式,您将始终只有一个AudioPlayer实例,因此只有AVAudioPlayer。