背景:天天听着网易云音乐,想着哪天要是自己能做一个类似网易云音乐的播放器就好了(大三还没毕业)。在CocoaChina代码库里面逛了有些日子了,就干脆下载几个音乐播放器的demo来练练手。实践结果告诉我:一个完整的播放器确实要做很多功能,确实有些难度。那么就开始说说我做的本地音乐播放器吧。
个人觉得吧,无论做什么项目或工程,都要先架构好再写,不然真的会很凌乱地。以前吧,我总是拿着东西就写,从不管什么架构,什么分层的。如果逮着某个部分就写,写到最后你会发现,你的代码耦合性太强了,不容易分离。当另一个控制器或者View
层或者Model
层要用到当前数据,不容易传递。(传递当然是可以传递的,只是逻辑看起来很别扭)。我个人还是比较喜欢先分好层,再写代码。当然也有人喜欢全部写好,再把每个部分分离出来,归类为不同的层。我更喜欢前者。
好啦,开始说说我整个工程的架构吧:
- 采用
MVC
的模式来管理项目,层管理控件,View
层显示控件,Model
层处理数据。 - 歌词界面归为View层(视图内的要显示东西太多,分离出来),其余控件在主控制器初始化显示。
- 自定义
UITableViewCell
来显示歌词,并且用算法按照播放进度来显示歌词的颜色。 - 有一些算法处理可以归为
Category
分类或者自己建一个工具类。
再说说这个工程里面的控件结构位置的概述吧:
第一个界面:
- 模糊的背景里面是一个
UIImageView
,采用了高斯(毛玻璃)效果。中间那个圆圈图片也是一个UIImageView
,并且修改他的Layer变成圆形。不难看出,这两个UIImageView
的图片是一样的,其实是从当前MP3音乐里面提取出来的。 - 上面歌名和歌手是用两个
UILabel
来显示,信息也是从当前MP3歌曲里面提取出来的。 - 下面有一个
UISlider
来控制歌曲播放进度。 - 还有两个
UILabel
分别来显示当前播放时间和歌曲总时长,歌曲里面提取出来的总时长是时间戳NSTimeInterval
的单位,我们用算法格式化转发为我们熟知的时间格式。 最下面自然是三个<