在StationsViewController类中,实现了对所得到的电台数据进行分析和拆解并通过UITableView将其显示出来。loadStationsFromJSON()通过调用DataManager.getStationDataWithSuccess(success: ((metaData: NSData!) -> Void))获取电台数据并将其0保存在stations:[RadioStation]中。再通过TableView方法来将所得数据呈现在UITableView上。通过重写prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)方法来完成将选中的电台传递给NowPlayingViewController。同时通过完成NowPlayingViewControllerDelegate的两个方法artworkDidUpdate(track: Track)和songMetaDataDidUpdate(track: Track)来获取和显示当前播放歌曲的信息。
7) NowPlayingViewController.swift
创建一个radioPlayer = MPMoviePlayerController()并对其进行设置。当调用stationDidChange()方法时,radioPlayer播放当前电台的媒体流。
metadataUpdated(n: NSNotification)方法用于获取radioPlayer正在播放音乐的metadata,通过进行简单的处理获得正在播放音乐的title和artist信息。如果发现currentSongName与获取title不符,说明开始播放一首新的歌曲了,调用resetAlbumArtwork()和queryAlbumArt()来获取新的歌曲信息,并用updateLockScreen()来更新锁屏界面,用songMetaDataDidUpdate(self.track)将新的歌曲信息传给StationsViewController。
通过使用API获取歌曲完整信息。
resetAlbumArtwork()中通过调用updateAlbumArtwork()来实现专辑封面的更新,如果获取专辑封面失败,则使用电台封面代替。
通过使用NSURLSessionDownloadTask来下载专辑图片,将下载完的图片存至track.artworkImage并更新封面图片,锁屏界面及将新数据回传给StationsViewController。
用于更新界面上的buttons和labels。
三、项目实现的一些特征分析
1) 动态正在播放图标
调用AnimationFrames class 中createFrames()方法为nowPlayingImageView.animationImages创建对象。在通过startAnimating()方法来实现动画效果。
2) 在app中打开safari
通过UIApplication.shareApplication().openURL(url)来实现。
3) 后台播放、锁屏播放及锁屏显示歌曲信息
系统开始接受远端事件。
允许后台播
锁屏歌曲信息设置及接受锁屏时对歌曲播放或暂停的控制。
四、发现的一些BUG
在XCode 7.0.1 iPhone 6s plus 模拟器运行下发现的BUG:
1) 内置email功能无法使用,每次点击email跳转到mail app后立即崩溃。
2) NowPlayingViewController 界面上的Volume Bar 无法调节音量。