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的更多细节。
为什么重新发明轮子? 只要使用AVPlayerViewController
的contentOverlayView
属性即可。 在这里,您可以设置专辑插图图像,或者在QuickTime徽标(video所在的位置)和控件之间放置任何UIView
。
请注意,必须在AVPlayerViewController
提交后执行此操作,因为其contentOverlayView
属性在prepareForSegue
为零