【问题标题】:continuous audio playing across different UIKit & SpriteKit scenes在不同的 UIKit 和 SpriteKit 场景中连续播放音频
【发布时间】:2017-08-01 12:36:42
【问题描述】:

我有一个包含多个视图控制器的应用。其中一些 ViewController 的视图是 UIViews,其他的是 SKViews。我想从用户进入游戏的那一刻开始播放音频,并继续播放相同的曲目而不会中断,即使从 VC 切换到另一个。这可能吗?

【问题讨论】:

  • 您可以通过 AppDelegate 运行音频,但我不会这样做。使用 SpriteKit 开发游戏时,您应该坚持使用一个视图控制器。
  • @El Tomato,这完全取决于应用程序,我设计了一些主要基于 UIKit 的应用程序,但有一个小窗口供小游戏存在。现在我使用这些公司应用程序,所以我无法将其链接到您的实际操作中。

标签: ios swift audio sprite-kit


【解决方案1】:

您可以使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多