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看起来杂乱


求助:

亲爱的你,亲爱的大神,能不能给我指点迷津,帮我优化代码呢?希望给我指出一种思路就可以了,不需要详细代码,再次本码农跪谢了。^^

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。