我正在使用Swift构建一个简单的音频播放器应用程序。我的故事板中有两个视图控制器。第二个视图控制器创建AVAudioPlayer的实例,用于播放音频。我希望用户能够离开那个视图控制器,使用应用程序中的其他功能,然后回到那个视图控制器来操作播放器。
问题是,当我播放一些音频时,导航离开,然后回到播放器视图控制器并再次按播放,两个版本的音频文件同时播放。
我猜它正在创建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()
}
我认为最快的解决方案是创建一个单例类来包装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。