2017-08-01 6 views
1

私は複数のView Controllerを持つアプリケーションを持っています。これらのViewControllerのビューの一部はUIViewです。その他はSKViewです。私は、ユーザーがゲームに参加してから2つ目のオーディオ再生を開始し、VCから別のセッションに連続しているときでも、中断することなく同じトラックを再生し続けたいと考えています。これは可能ですか?さまざまなUIKit&SpriteKitシーンで連続したオーディオを再生する

+0

あなたは私がそれをしないだろうということを除いてAppDelegateを通じてオーディオを実行することができます。 SpriteKitでゲームを開発するときには、1つのビューコントローラに固執する必要があります。 –

+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

関連する問題