AVPlayerViewController使用纯audioAVPlayer

刚开始与AVKit,我想播放一些audio。 在Mastering Modern Media Playback中使用新的AVPlayerViewController会很好,所以我有一个现成的播放/暂停/searchUI。 我基本上有一个容器视图的故事板,有一个embedded到AVPlayerViewController的segue。 然后我使用:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "embedAudio") { var playerViewController:AVPlayerViewController = segue.destinationViewController as AVPlayerViewController playerViewController.player = AVPlayer(URL: NSURL(string: "http://dts.podtrac.com/redirect.mp3/files.serialpodcast.org/sites/default/files/podcast/1420057326/serial-s01-e01.mp3")) } } 

它embedded很好,并播放,但它有一个大的黑色的QuickTime符号video将是。 我想知道是否有办法让它看起来更像音乐或播客应用程序。

不要使用AVPlayerViewController ,因为它是一个全屏黑盒video播放器。

相反,使用工具栏和操作系统中可用的控件(播放,暂停,停止等)创build您自己的视图控制器并将其挂接到您的AVAudioPlayer 。 这是你自己的视图控制器的代码可能是这样的:

维护一个玩家的实例

 var audioPlayer:AVAudioPlayer! @IBOutlet weak var playProgress: UIProgressView! 

例如:玩

 @IBAction func doPlayAction(_ sender: AnyObject) { do { try audioPlayer = AVAudioPlayer(contentsOf: audioRecorder.url) audioPlayer.play() } catch {} } 

例如:停止

 @IBAction func doStopAction(_ sender: AnyObject) { if let audioPlayer = self.audioPlayer { audioPlayer.stop() } } 

示例:跟踪进度

 func playerProgress() { var progress = Float(0) if let audioPlayer = audioPlayer { progress = ((audioPlayer.duration > 0) ? Float(audioPlayer.currentTime/audioPlayer.duration) : 0) } playProgress.setProgress(progress, animated: true) } 

我已经发布了一个使用本答案中概述的方法的录制回放示例。

预习

►在GitHub上find这个解决scheme和Swift Recipes的更多细节。

为什么重新发明轮子? 只要使用AVPlayerViewControllercontentOverlayView属性即可。 在这里,您可以设置专辑插图图像,或者在QuickTime徽标(video所在的位置)和控件之间放置任何UIView

请注意,必须在AVPlayerViewController提交后执行此操作,因为其contentOverlayView属性在prepareForSegue为零