iOS开发思路提问(系列1:一个Button的三种状态怎样切换?)
问题抽象:
现在在做一个音乐播放的模块,对于音乐播放顺序有三种状态切换,如下图所示,
顺序播放
单曲循环
随机播放
现在我只抽象出最简单的部分,以该Button操作的交互过程来描述,
(1)Button默认的状态是“顺序播放”歌曲模式
(2)不断点击Button,歌曲循环模式切换顺序为“顺序播放->单曲循环->随机播放->顺序播放->....”
(3)每次点击设置了一种歌曲循环模式,都将该循环模式发送给服务器,下次来到该界面的时候,从服务器读取数据,自动载入正确的模式,而不一定就是“顺序播放”循环模式
相信这个简单的场景,大家都非常明白。
解决方案
-----------------分割线----------------我自己的解决方案----------------如下---------------------------
我认为
(1)Button一共就三种状态,所以定义了一个enum枚举,代表了3中歌曲播放循环模式,
enum{ SoundPlayQueue,//顺序播放 SoundPlaySingle,//单曲循环 SoundPlayRandom,//随机播放 };
(2)使用Button的tag属性作为标识歌曲播放的状态,statusFromServer作为从服务端读取到的设置的歌曲播放状态(它有三个值,分别是00-顺序播放,01-单曲循环,02-随机播放),那么初次加入界面时候,就要对Button的tag进行赋值
- (void)viewDidLoad { [super viewDidLoad]; int statusFromServer = [从服务端获取的歌曲循环模式-有三个值(00,01,02)]; if(statusFromServer == 00) { playBtn.tag = SoundPlayQueue; [playBtn setImage:顺序播放图片]; } else if(statusFromServer == 01) { playBtn.tag = SoundPlaySingle; [playBtn setImage:单曲循环图片]; } else if(statusFromServer == 02) { playBtn.tag = SoundPlayRandom; [playBtn setImage:随机播放图片]; } }
(3)点击Button,添加Button点击方法-playBtnClicked,切换歌曲循环模式,
- (void)playBtnClicked:(id)sender { UIButton tempBtn = (UIButton *)sender; if(tempBtn.tag == SoundPlayQueue) { //如果现在顺序播放,那么下一个模式设置为单曲循环, tempBtn.tag = SoundPlaySingle; [tempBtn setImage:单曲循环图片]; statusFromServer = 01; } else if(tempBtn.tag == SoundPlaySingle) { //如果现在单曲循环,那么下一个模式设置为随机播放, tempBtn.tag = SoundPlayRandom; [tempBtn setImage:随机播放图片]; statusFromServer = 02; } else if(tempBtn.tag == SoundPlayRandom) { //如果现在随机播放,那么下一个模式设置为顺序播放, tempBtn.tag = SoundPlayQueue; [tempBtn setImage:顺序播放图片]; statusFromServer = 00; } }
自我总结:
我用这种方式确实解决了问题,但是总感觉代码过于累赘和不合理,
(1)最主要的一个问题就是Button作为一个UI控件,它只是用于进行界面显示和事件控制,但是我这边却用它的属性来标识当前的歌曲循环模式,也就是说Button的所做的事情超过了它的业务范畴;
(2)其次就是这种方式,无疑增加了当前ViewController中的代码,是的ViewController看起来杂乱
求助:
亲爱的你,亲爱的大神,能不能给我指点迷津,帮我优化代码呢?希望给我指出一种思路就可以了,不需要详细代码,再次本码农跪谢了。^^
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。