2015-09-18 30 views
0

我正在使用Swift構建一個簡單的音頻播放器應用程序。我的故事板中有兩個視圖控制器。第二個視圖控制器創建AVAudioPlayer的一個實例,並用於播放音頻。我希望用戶能夠遠離該視圖控制器,使用應用程序中的其他功能並返回到該視圖控制器來操縱播放器。如何防止每次加載視圖控制器時創建AVAudioPlayer類的新實例 - Swift

問題是,當我播放一些音頻時,導航離開,然後返回播放器視圖控制器並再次按播放,同時播放兩個版本的音頻文件。

我猜測它正在創建一個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

我認爲最快的解決方案是創建一個包裝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實例。

相關問題