如何防止每次加载View Controller时创建新的AVAudioPlayer类实例 - Swift

时间:2015-09-18 19:57:18

标签: ios xcode swift uiviewcontroller avaudioplayer

我正在使用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()
}

1 个答案:

答案 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。