在不同的 UIKit 和 SpriteKit 场景中连续播放音频
Posted
技术标签:
【中文标题】在不同的 UIKit 和 SpriteKit 场景中连续播放音频【英文标题】:continuous audio playing across different UIKit & SpriteKit scenes 【发布时间】:2017-08-01 12:36:42 【问题描述】:我有一个包含多个视图控制器的应用。其中一些 ViewController 的视图是 UIView
s,其他的是 SKView
s。我想从用户进入游戏的那一刻开始播放音频,并继续播放相同的曲目而不会中断,即使从 VC 切换到另一个。这可能吗?
【问题讨论】:
您可以通过 AppDelegate 运行音频,但我不会这样做。使用 SpriteKit 开发游戏时,您应该坚持使用一个视图控制器。 @El Tomato,这完全取决于应用程序,我设计了一些主要基于 UIKit 的应用程序,但有一个小窗口供小游戏存在。现在我使用这些公司应用程序,所以我无法将其链接到您的实际操作中。 【参考方案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
【讨论】:
以上是关于在不同的 UIKit 和 SpriteKit 场景中连续播放音频的主要内容,如果未能解决你的问题,请参考以下文章
什么大致类似于 iOS-UIKit 中的 cocos2D 场景?
Swift:Spritekit 中的多个场景,从第二个和第一个场景的不同 Sprite 节点类型调用 touchesBegan