2017-08-01 37 views
1

我有一個應用程序與多個視圖控制器。其中一些ViewControllers的視圖是UIView s,其他的是SKView s。我想從第二個用戶進入遊戲開始播放音頻,並繼續播放同一曲目而不會中斷,即使從VC到另一個曲目也是如此。這可能嗎?連續音頻跨UIKit和SpriteKit場景播放

+0

你可以通過AppDelegate中除了我不會這麼做的運行聲音。當您使用SpriteKit開發遊戲時,您應該堅持使用一個視圖控制器。 –

+0

@El Tomato,完全取決於應用程序,我設計了一些主要基於UIKit的應用程序,但有一個迷你遊戲存在的小窗口。現在我使用的這些公司應用程序,所以我無法將它與您的行動聯繫起來。 – Knight0fDragon

回答

2

您可以使用AVPlayer實例進行音頻播放。要循環音軌以連續播放,您必須檢查「AVPlayerItemDidPlayToEndTime」通知並重新啓動播放器。

如果你想跨多個視圖控制器播放音軌,我建議創建一個包含AVPlayer實例並控制播放的類。然後只需創建一個靜態的類實例,以便能夠在應用程序中訪問它。

import AVKit 

class AudioManager { 

    static var sharedInstance = AudioManager() 

    private var player: AVPlayer? 

    func play() { 
     // TODO: Initialize AVPlayer with desired audio track & start playing 
     // player = AVPlayer(...) 
     player?.play() 

     // Register for the did play to end time notification to loop audio 
     if let item = player?.currentItem { 
      NotificationCenter.default.addObserver(self, selector: #selector(onPlaybackFinished), name: .AVPlayerItemDidPlayToEndTime, object: item) 
     } 
    } 

    @objc private func onPlaybackFinished() { 
     player?.seek(to: kCMTimeZero) 
     player?.play() 
    } 

} 

// to start playback from anywhere in your app 
AudioManager.sharedInstance.play() 

AVPlayer文檔:https://developer.apple.com/documentation/avfoundation/avplayer